代码之家  ›  专栏  ›  技术社区  ›  Sunny

从子查询中选择“最佳结果”?

  •  0
  • Sunny  · 技术社区  · 11 年前
    SELECT * FROM table1
    WHERE col1 = ANY (
        SELECT DISTINCT col2 FROM table2
        WHERE first = 'blah'
        OR second = 'blahblah'
        OR third = 'blahblahblah' );
    

    子查询检查三列( first , second , third ). 在本例中,我使用 ANY ,但我希望它像这样返回:

    If found `first` return `first`
    else if found `second` return `second`
    else if found `third` return `third`
    

    知道我在说什么吗?我只能优先选择1行(最好的) 第一 , 第二 , 第三

    3 回复  |  直到 11 年前
        1
  •  2
  •   Enrique Muñoz Rodas    11 年前

    我想你想要这个:

    SELECT * FROM table1
    WHERE col1 = (
        SELECT col2 FROM table2
        WHERE first = 'blah'
        OR second = 'blahblah'
        OR third = 'blahblahblah'
        ORDER BY
        first = 'blah' DESC,
        second = 'blahblah' DESC,
        third = 'blahblahblah' DESC
        LIMIT 1
    );
    
        2
  •  0
  •   Gordon Linoff    11 年前

    这符合你的要求吗?

    SELECT t.*, 'first'
    FROM table1 t
    WHERE col1 IN (SELECT col2 FROM table2 WHERE first = 'blah')
    UNION ALL
    SELECT t.*, 'second'
    FROM table1 t
    WHERE col1 IN (SELECT col2 FROM table2 WHERE first <> 'blah' AND second = 'blahblah')
    UNION ALL
    SELECT t.*, 'third'
    FROM table1 t
    WHERE col1 IN (SELECT col2 FROM table2 WHERE first <> 'blah' AND second <> 'blahblah' AND third = 'blahblahblah' );
    

    对于每个匹配(基于 col1 )它返回三个条件中的第一个。

        3
  •  0
  •   user4524985 user4524985    11 年前

    试试这个,

    SELECT *, COALESCE(first, second, third) as best FROM tab