2015-02-05 79 views
0
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排(最好)first,second,third

+0

你要什麼的結果是什麼樣子? – 2015-02-05 17:32:35

回答

2

我想你想要這樣的:

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 
); 
0

這是做你想做的嗎?

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)它返回三個條件中的第一個。

0

試試這個,

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