MYSQL多个内部连接检索每个信息

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

我想在脚本中运行以下查询,但它无法正常工作。 我没有收到任何错误,它只是从hs_data correct(以及所有内容)中选择数据,但是从hs_download_链接中,它只检索到与hs.images中的条目一样多的数据

此查询的目标应该是从hs_数据中获取任何条目。如果在hs_下载链接或hs_图像中有与这些条目相关的信息,它也应该得到它们

                    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提供的解决方案,因为我可以更好地阅读它:>