[英]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.