我想在我的脚本中运行以下查询,但它无法正常工作。 我没有收到任何错误,它只是从 hs_data 正确选择数据(以及所有内容),但从 hs_download_links 中它只检索与 hs.images 中的条目一样多的数据。
此查询的目标应该是从 hs_data 获取任何条目。如果 hs_download_links 或 hs_images 中有与这些条目相关的信息,它也应该获取它们。
SELECT
h.hacks_ID, h.hacks_Name, h.hacks_Name_Full,
h.hacks_Version, h.hacks_Description, h.hacks_AddDate,
h.hacks_Type, SUM(dl.link_count) AS link_count, i.image_NameThumb
FROM
hs_data h
LEFT JOIN
(hs_download_links dl CROSS JOIN hs_images i)
ON
((dl.link_hackID = h.hacks_ID AND i.image_HackID = h.hacks_ID)
OR
(dl.link_hackID = h.hacks_ID AND i.image_HackID is NULL)
OR
(dl.link_hackID is NULL AND i.image_HackID = h.hacks_ID)
OR
(dl.link_hackID is NULL AND i.image_HackID is NULL) )
GROUP BY
h.hacks_ID
ORDER BY link_count DESC
如果你们能帮助我,那就太好了,非常感谢:)
最佳答案
我认为你可以这样写:
SELECT h.hacks_ID, h.hacks_Name, h.hacks_Name_Full,
h.hacks_Version, h.hacks_Description, h.hacks_AddDate,
h.hacks_Type, SUM(dl.link_count) AS link_count, i.image_NameThumb
FROM hs_data h LEFT JOIN
hs_download_links dl
on dl.link_hackID = h.hacks_ID LEFT JOIN
hs_images i
on i.image_HackID = h.hacks_ID
GROUP BY h.hacks_ID
ORDER BY link_count DESC;
我不确定您想要通过交叉连接
来完成什么,但它似乎不必要地令人困惑。您可以将左外连接
链接在一起。他们仍然保留第一个表中的所有行。
顺便说一句,您的选择有一个悬空的i.image_NameThumb
。这意味着只会出现一个这样的值。如果有多个值,您可能需要使用group_concat()
。或者甚至是 min()
或 max()
只是为了阐明查询的意图。
关于MYSQL 多个 INNER JOIN 检索每条信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24533254/