首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL多个内连接检索每个信息

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

Stack Overflow用户
提问于 2014-07-02 22:05:56
回答 2查看 26关注 0票数 0

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

此查询的目标应该是从hs_data获取任何条目。如果在hs_download_links或hs_images中有与这些条目相关的信息,它也应该获取这些信息。

代码语言:javascript
复制
                    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

如果你们能帮我,那就太好了,非常感谢:)

EN

回答 2

Stack Overflow用户

发布于 2014-07-02 22:08:56

我认为你可以这样写:

代码语言:javascript
复制
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链接在一起。它们仍然保留第一个表中的所有行。

顺便说一下,您的select有一个悬空的i.image_NameThumb。这意味着只会出现一个这样的值。如果有多个值,您可能希望使用group_concat()。或者甚至是min()max(),只是为了澄清查询的意图。

票数 0
EN

Stack Overflow用户

发布于 2014-07-02 22:14:10

这将返回hs_data中每条记录的下载链接数和第一个图像(如果有

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24533254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档