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

发布于 2024-10-09 13:44:29 字数 338 浏览 0 评论 0原文

我执行此查询(1):

(1)SELECT * FROM t1 WHERE title LIKE 'key%' LIMIT 1

仅当上一个查询没有结果时,我才需要执行第二个(2)查询,

(2)SELECT * FROM t1 WHERE title LIKE '%key%' LIMIT 1

基本上我只需要 1 行获得与我的键最接近的标题。

Atm 我正在使用带有自定义字段的 UNION 查询来对其进行排序,并且 LIMIT 1。问题是,如果第一个查询已经得到结果,我不想执行其他查询。

谢谢

I do this query(1):

(1)SELECT * FROM t1 WHERE title LIKE 'key%' LIMIT 1

I need to do a second(2) query only if this previous query has no results

(2)SELECT * FROM t1 WHERE title LIKE '%key%' LIMIT 1

basically i need only 1 row who got the most close title to my key.

Atm i am using an UNION query with a custom field to order it and a LIMIT 1. Problem is I don't want to do the others query if already the first made the result.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰葑 2024-10-16 13:44:30

没有标准的方法可以在单个 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 的前半部分。

There isn't a standard way to say 'execute query Q2 if and only if query Q1 returns nothing' in a single SQL statement.

The moderately close approach would be:

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

The issue is whether the optimizer would be intelligent enough to realize that the NOT EXISTS sub-query is the first half of the UNION.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文