2015-02-05 78 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