0

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

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

请让我知道我该如何解决这个问题,所以我的查询应该得到它们匹配的 id 的确切值,谢谢

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
4

3 回答 3

2

AND在与Left或连接一起使用时使用运算符Right会产生不同的结果。你应该清楚你想要完成什么..看到这个

于 2012-06-21T16:02:59.123 回答
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
于 2012-06-21T15:59:24.917 回答
1

好吧,这就是您首先隐式内连接 3 个表,然后仅当与所有 3 个内连接表相关的 3 个条件匹配时才将结果显式左连接到第 4 个表(即,当第 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 中都被弃用了)

于 2012-06-21T16:16:13.487 回答