sql - 仅当先前查询没有结果时才执行查询

标签 sql mysql union limit

我执行此查询(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/

相关文章:

ios - 如何在 fmdb 数据库中使用 limit 和 order by 子句来检索表数据?

php - 使用 mysqli 将表单 $_POST 数组插入 MySQL 数据库

sql - T-SQL [UNION ALL] 从查询结果中删除记录

union - Informix SQL 11.5 将标题放在已卸载文件的列上

php - MySQL group_concat 并与另一个 group_concat 嵌套

java - Hibernate Union 替代方案

ios - 根据 iOS 中的区域设置使用不同的数据库

mysql - 如何更改字符串中的字符顺序

mysql - 如何使用 case 和 limit 语句处理这个 mysql 查询

用于识别 Assets 的 MySQL 国家库存编号 (NSN)