MYSQL 多个 INNER JOIN 检索每条信息

标签 mysql join left-join

我想在我的脚本中运行以下查询,但它无法正常工作。 我没有收到任何错误,它只是从 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/

相关文章:

php - MySQL 中更新表不成功

MySQL 在同一个查询中使用左连接和一些内连接

mysql - LEFT JOIN 在同一张表上加倍行

MySQL从3个表中选择所有不同数量的行

php - 在 PHP 和 MySQL 中使用联结表来分类和包含和排除类别

mysql - 违反完整性约束 - Null MySQL

mysql - 使用 MySql 左连接选择查询

php - Codeigniter-MySql : Join three column values of one table with the ID of another table

php - mysql 连接两个表

sql - Rails 4 JOIN GROUP BY 和 SELECT