我在MySQL中有以下表格:
用户 轮廓 率
在users表中,我有以下记录:
id: 1 name: John status: active
在个人资料中,我有以下内容:
id: 5 bio: blah blah blah user_id: 1
表格费率为空,但包含以下字段:
id, rate, and user_id
我正在尝试使用SQL查询这些表并显示有关用户,用户配置文件(如果有的话)及其费率(如果存在)的信息。我使用的SQL如下:
SELECT user.name, profile.bio, rate.rate
FROM user
LEFT JOIN (profile, rate) ON (user.id = profile.user_id AND user.id = rate.user_id)
WHERE status = 'active';
这里的问题是上面的sql返回user.name数据,但是即使在配置文件表中有匹配的user_id记录,profile.bio也是null。似乎如果在费率表中没有该用户的匹配记录,MySQL将不会显示生物数据。
如果我希望SQL显示用户的名字以及他们的生物和小时费率(如果存在),我该怎么做呢?我有点困惑,因为我认为上面的SQL应该可行。
谢谢!
答案 0 :(得分:2)
SELECT user.name, profile.bio, rate.rate
FROM user
LEFT JOIN profile ON user.id = profile.user_id
LEFT JOIN rate ON user.id = rate.user_id
WHERE status = 'active'
您试图合并LEFT JOIN逻辑,只有在两个条件都为真(user.id = profile.user_id AND user.id = rate.user_id
)时它才会加入。
答案 1 :(得分:2)
我不熟悉在一个子句中进行多个连接,所以我想分割连接,如下所示:
SELECT user.name, profile.bio, rate.rate
FROM user
LEFT JOIN profile ON user.id = profile.user_id
LEFT JOIN rate ON user.id = rate.user_id
WHERE status = 'active';
答案 2 :(得分:0)
您的原始代码在user
表格上执行了左连接,而profile
和rate
的交叉连接生成了该表格。
两个表的交叉连接是两个表的笛卡尔积。具体来说,不会产生仅来自一个表的行。因此,当此交叉连接表保持连接到user
并使用该where
子句时,您看不到所需的结果。
要获得所需的结果,您需要多次离开连接。