我想在我的脚本中运行以下查询但它无法正常工作。 我没有收到任何错误,它只是从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
如果你们能帮助我,那会很棒,非常感谢:)。
答案 0 :(得分:0)
我认为你可以写成:
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;
我不确定你要用cross join
完成什么,但似乎不必要地混淆了。您可以将left outer join
链接在一起。他们仍然将所有行保留在第一个表中。
顺便说一下,你的选择有一个悬空i.image_NameThumb
。这意味着只会出现一个这样的值。如果有多个值,您可能需要使用group_concat()
。或者甚至min()
或max()
只是为了澄清查询的意图。
答案 1 :(得分:0)
这将返回hs_data
中每条记录的下载链接数和第一张图像(如果有):
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