我执行此查询(1):
(1)SELECT * FROM t1 WHERE title LIKE 'key%' LIMIT 1
仅当上一个查询没有结果时,我才需要执行第二个(2) 查询
(2)SELECT * FROM t1 WHERE title LIKE '%key%' LIMIT 1
基本上我只需要 1 行与我的 key 最接近的标题。
Atm 我正在使用带有自定义字段的 UNION 查询来对其进行排序,并且 LIMIT 1。问题是,如果第一个查询已经产生结果,我不想执行其他查询。
谢谢
最佳答案
没有一种标准方法可以在单个 SQL 语句中表示“当且仅当查询 Q1 不返回任何内容时执行查询 Q2”。
适度接近的方法是:
SELECT * FROM t1 WHERE title LIKE 'key%' LIMIT 1
UNION
SELECT * FROM t1 WHERE title LIKE '%key%'
AND NOT EXISTS (SELECT * FROM t1 WHERE title LIKE 'key%')
LIMIT 1
问题在于优化器是否足够智能,能够意识到 NOT EXISTS 子查询是 UNION 的前半部分。
关于sql - 仅当先前查询没有结果时才执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535331/