和版本的UNION

时间:2014-04-13 10:38:10

标签: mysql sql search

使用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)"  

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

但是union会返回以OR方式连接的结果。我需要以AND方式获得结果,如果所有子搜索都返回,则只返回一行。
看看第一个例子。我正在寻找等于此的联合查询:

SELECT id FROM articles WHERE title LIKE $query AND text LIKE $query

这可能吗?

1 个答案:

答案 0 :(得分:2)

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

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

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