使用并集,您可以连接多个选择结果:
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