[英]Select “the best result” from subquery?
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`
知道我在说什么吗? 我只能在first
, second
, third
优先级中选择1行(最佳)
我想你想要这个:
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
);
这是您想要的吗?
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
),它返回三个条件中的第一个。
尝试这个,
SELECT *, COALESCE(first, second, third) as best FROM tab
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.