AND version of UNION



使用并集,您可以连接多个选择结果:

SELECT id FROM `articles` WHERE title LIKE $query
UNION
SELECT id FROM `articles` WHERE text LIKE $query

当然,上面的查询是一种愚蠢的搜索方式。它等于:

SELECT id FROM `articles` WHERE title LIKE $query OR text LIKE $query

然而,这种方法可能对嵌套选择更有意义:

SELECT * FROM `articles` as art WHERE exists
             (SELECT 1 FROM `users` WHERE users.id = articles.author AND username LIKE $query)"  

您刚刚阅读的查询将按用户名返回文章。如果使用了许多嵌套搜索,那么使用并集就开始有意义了。

但并集将返回以OR方式连接的结果。我需要以AND的方式获得结果,也就是说,如果所有子搜索都返回了一行,那么只返回一行
看看第一个例子。我正在寻找等于以下的联合查询:

SELECT id FROM articles WHERE title LIKE$queryANDtext LIKE$query

这可能吗?

不,这是不可能的。UNION只返回一个网格中两个查询的结果,唯一的约束是您需要返回相同数量的列,并且这些列需要具有相同的类型。

为了简化代码,您可以使用JOIN s而不是子查询:

SELECT * FROM `articles` AS art  
INNER JOIN `users` AS u 
   ON art.author = u.id 
WHERE u.username LIKE $query

最新更新