MYSQL多个内部连接检索每个信息
我想在脚本中运行以下查询,但它无法正常工作。 我没有收到任何错误,它只是从hs_data correct(以及所有内容)中选择数据,但是从hs_download_链接中,它只检索到与hs.images中的条目一样多的数据 此查询的目标应该是从hs_数据中获取任何条目。如果在hs_下载链接或hs_图像中有与这些条目相关的信息,它也应该得到它们MYSQL多个内部连接检索每个信息,mysql,join,left-join,Mysql,Join,Left Join,我想在脚本中运行以下查询,但它无法正常工作。 我没有收到任何错误,它只是从hs_data correct(以及所有内容)中选择数据,但是从hs_download_链接中,它只检索到与hs.images中的条目一样多的数据 此查询的目标应该是从hs_数据中获取任何条目。如果在hs_下载链接或hs_图像中有与这些条目相关的信息,它也应该得到它们 SELECT h.hacks_ID, h.hacks_Name, h
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\u nametumb
。这意味着只会出现一个这样的值。如果有多个值,您可能需要使用group\u concat()
。甚至min()
或max()
只是为了澄清查询的目的。这将返回hs\u数据中每个记录的下载链接数和第一个图像(如果有):
SELECT d.*,
(
SELECT COUNT(*)
FROM hs_download_links dl
WHERE dl.link_hackId = d.hacks_Id
),
(
SELECT i.image_NameThumb
FROM hs_images i
WHERE i.image_hackId = d.hacks_Id
ORDER BY
image_NameThumb
LIMIT 1
)
FROM hs_data d
假设您在hs\u data
中有3个下载链接和7个图像作为记录。您希望在结果集中为该hs\u数据返回多少条记录
?谢谢,这对我很有用,但我将使用Gordon\u Linoff提供的解决方案,因为我可以更好地阅读它:>