左边加入多个表格问题

时间:2010-12-10 15:48:04

标签: sql mysql

我在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应该可行。

谢谢!

3 个答案:

答案 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表格上执行了左连接,而profilerate的交叉连接生成了该表格。

两个表的交叉连接是两个表的笛卡尔积。具体来说,会产生仅来自一个表的行。因此,当此交叉连接表保持连接到user并使用该where子句时,您看不到所需的结果。

要获得所需的结果,您需要多次离开连接。