繁体   English   中英

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

[英]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' );

子查询检查三列( firstsecondthird )。 在此示例中,我使用ANY ,但是我希望它像这样返回:

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

知道我在说什么吗? 我只能在firstsecondthird优先级中选择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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM