我有点迷失,因为如何将两个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)?
谢谢!
答案 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 ....