mysql多个where和内连接查询组合

时间:2010-05-11 22:17:47

标签: sql mysql

我有点迷失,因为如何将两个mysql查询作为一个运行(返回一个结果集进行排序等)。

我理解如何进行多个JOINS但需要结合下面的不仅仅是多个连接 - 它将包含多个等等。

第一次查询

     sql = "SELECT s.id, s.song_name
           FROM `songs` as s
           INNER JOIN `artists` as a ON s.artist_id = a.id
           WHERE ((`a`.id = #{search}))"

第二次查询

   sql = "SELECT s.id, s.song_name
      FROM `songs` as s
      INNER JOIN `similarments` as si ON s.artist_id = si.artist_id
      WHERE ((`si`.similar_id = #{search}))"

然后立即运行两个查询,以便我可以对它们进行排序等。 或者将它们组合成一个大的查询(可能在某个地方放一个OR)?

谢谢!

1 个答案:

答案 0 :(得分:4)

运行两个查询并合并结果的简单方法是使用UNION(如果您不想删除重复项,则使用UNION ALL)。在你的情况下,它看起来像这样:

(
    SELECT s.id, s.song_name
    FROM `songs` as s
    INNER JOIN `artists` as a ON s.artist_id = a.id
    WHERE ((`a`.id = #{search}))
)
UNION
(
    SELECT s.id, s.song_name
    FROM `songs` as s
    INNER JOIN `similarments` as si ON s.artist_id = si.artist_id
    WHERE ((`si`.similar_id = #{search}))
)
ORDER BY ....