繁体   English   中英

为什么这个查询什么都不返回?

[英]Why does this query return nothing?

这个查询工作正常,但是如果用户在表“user_categories”中没有任何类别,我很难弄清楚为什么它不会返回任何内容? 这是表结构:

用户:用户ID,用户名,用户城市

类别:类别ID,类别名称

user_categories:用户ID,类别ID

SELECT users.*, GROUP_CONCAT(categories.category_name) AS categories
FROM users
INNER JOIN user_categories ON users.user_id = user_categories.user_id
INNER JOIN categories ON user_categories.category_id = categories.category_id
WHERE users.user_city = 'brooklyn'
GROUP BY users.user_id
LIMIT 10

如果user_categories中的user_id不存在任何行,我只需要新列“类别”为空...

谢谢!

您使用了错误的连接类型 - 只有在两个表中都找到匹配项时,内连接才会成功。 相反,您想尝试外连接。 尝试这样的事情:

SELECT users.*, GROUP_CONCAT(categories.category_name) AS categories
FROM users
LEFT OUTER JOIN user_categories ON users.user_id = user_categories.user_id
LEFT OUTER JOIN categories ON user_categories.category_id = categories.category_id
WHERE users.user_city = 'brooklyn'
GROUP BY users.user_id
LIMIT 10

Wikipedia SQL JOIN文章对可用的连接类型进行了相当不错的总结。

SELECT  users.*, GROUP_CONCAT(categories.category_name) AS categories
FROM    users
LEFT JOIN
        user_categories ON users.user_id = user_categories.user_id
LEFT JOIN
        categories ON user_categories.category_id = categories.category_id
WHERE   users.user_city = 'brooklyn'
GROUP BY
        users.user_id
LIMIT 10

请注意,在MyISAM表上,子查询解决方案可能更有效:

SELECT  users.*,
        (
        SELECT  GROUP_CONCAT(category_name)
        FROM    user_categories uc
        JOIN    categories c
        ON      c.category_id = uc.category_id
        WHERE   uc.user_id = users.id
        ) AS categories
FROM    users
WHERE   users.user_city = 'brooklyn'
ORDER BY
        user_id
LIMIT 10

有关详细信息,请参阅我的博客中的这篇文章

如果两个表中都没有记录,则内部联接不会返回记录。 您可能想要左外连接。

那是因为你对user_categories使用INNER JOIN 如果使用LEFT JOIN ,如果用户没有相应的ID,则将为该表返回空数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM