【问题标题】:SQl queries left join not giving accurate resultsSQL 查询左连接没有给出准确的结果
【发布时间】:2012-06-23 21:55:36
【问题描述】:

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

users.id = users_roles.fk_user_id 但是用户角色的输出不正确。 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

【问题讨论】:

    标签: mysql sql phpmyadmin


    【解决方案1】:

    AND 运算符与LeftRight 一起使用时会产生不同的结果。您应该清楚自己要完成的工作..See this

    【讨论】:

      【解决方案2】:

      这就是您首先隐式内连接 3 个表,然后仅当与所有 3 个内连接表相关的 3 个条件都匹配时(即,当第 3 个条件为假,剩下的 2 个表中的任何一个都没有加入任何内容)

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

      如果您需要外连接:

      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 都弃用了隐式外连接)

      【讨论】:

      • 好吧,谢谢我是初学者,在学习阶段,您的答案要好得多,现在所有检查都按照我想要的方式相应地执行,并且使用显式连接没有空结果。那么,从现在开始,如果我必须加入多个表,我应该始终使用这种样式吗?这是一种好的编码习惯吗?
      • there is much debate 考虑到隐式连接和显式连接,但至于将它们组合起来肯定是不好的编码习惯
      【解决方案3】:

      当它显示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
      

      【讨论】:

      • 好的意味着它的发生是因为其他检查(我通过删除它们来检查它,你是对的)如果我在上面提到的查询中插入插入,我该如何进行检查查询它只检查和存储那些之前没有输入数据的月/年数据。谢谢,(如果你说我会发布另一个问题)
      • @softgenic 这可能是另一个问题。您需要更好地解释它,以便我们所有人都能理解。
      • 请检查此网址,看看您是否可以提供帮助,谢谢,stackoverflow.com/questions/11144468/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2019-01-10
      相关资源
      最近更新 更多