SQl查询左连接没有给出准确的结果

时间:2012-06-21 15:53:24

标签: mysql sql phpmyadmin

我一直在尝试根据他们的角色ID加入两个表(USERS和USERS_ROLES)我把左连接放在下面的查询

  

users.id = users_roles.fk_user_id   但输出不正确的users_roles.fk_role_id coulmun并显示NULL,其中应显示users.id = users_roles.fk_user_id的id为4(大多数地方),因为在users.id = users_roles.fk_user_id上为users_roles的值。 fk_role_id = 4

请告诉我如何解决这个问题,这样我的查询就会产生匹配的ids的确切值, 感谢

SELECT users.id, users.v_first_name, users.v_last_name, user_facility.fk_facility_id,users.fk_tenant_id, marital_status.v_marital_status, 
            users.v_blood_type, NOW(),users_roles.fk_role_id
            FROM users
            LEFT JOIN (user_facility, marital_status, users_roles) ON
            users.id = user_facility.fk_user_id AND users.fk_marital_status_id=marital_status.id AND  users.id = users_roles.fk_user_id

3 个答案:

答案 0 :(得分:2)

ANDLeft联接一起使用时,Right运算符的使用会产生不同的结果。你应该清楚你想要完成什么...... See this

答案 1 :(得分:1)

当它显示NULL时,表示JOIN子句中的所有表之间没有对应关系(关系)。

如果您只想显示所有表中具有关系的那些,请改用INNER JOIN

SELECT u.id,
       u.v_first_name,
       u.v_last_name,
       uf.fk_facility_id,
       u.fk_tenant_id,
       ms.v_marital_status,
       u.v_blood_type,
       NOW(),
       ur.fk_role_id
FROM users u
INNER JOIN user_facility uf ON u.id = uf.fk_user_id
INNER JOIN marital_status ms ON u.fk_marital_status_id=ms.id
INNER JOIN users_roles ur ON u.id = ur.fk_user_id

答案 2 :(得分:1)

通过首先隐式内连接3个表然后显式左连接结果到第4个表,只有当3个与所有3个内部连接表相关的条件匹配时(即第3个条件时)是假的,剩下的两个表中没有任何一个加入

我强烈建议不要结合隐式和显式联接,我个人一直使用显式联接:

如果您需要外部联接:

SELECT ...
FROM users
LEFT JOIN user_facility ON users.id = user_facility.fk_user_id
LEFT JOIN marital_status ON users.fk_marital_status_id=marital_status.id
LEFT JOIN users_roles ON users.id = users_roles.fk_user_id

如果您需要内部联接:

SELECT ...
FROM users
JOIN user_facility ON users.id = user_facility.fk_user_id
JOIN marital_status ON users.fk_marital_status_id=marital_status.id
JOIN users_roles ON users.id = users_roles.fk_user_id

或者如果您出于某些不明原因而优先使用隐式内部联接:

SELECT ...
FROM users,
     user_facility,
     marital_status,
     users_roles
WHERE users.id = user_facility.fk_user_id
  AND users.fk_marital_status_id=marital_status.id
  AND users.id = users_roles.fk_user_id

(据我所知,隐式外连接在所有RDBMS中都被弃用)