代码之家  ›  专栏  ›  技术社区  ›  The50

MySQL-选择联接表中count等于1的行

  •  0
  • The50  · 技术社区  · 6 年前

    仅当另一个名为“web\U users\U Branchs”的联接表的行等于1时,我才需要从表“web\U users”中选择行。

    我现在拥有的:

    SELECT id, code from web_users 
    JOIN
    (
    SELECT client_code
      FROM web_users_branches
    HAVING COUNT(*) = 1
    ) as t2
    ON web_users.code = t2.client_code;
    

    我得到的结果是空的。

    数据库示例:

    Web用户表:

    id code
    1  0001
    2  0002
    3  0003
    

    Web用户分支表:

    id  client_code
    1   0001
    2   0001
    3   0002
    4   0003
    5   0003
    

    现在在这个查询之后,我应该只得到client\u代码为0002的用户,因为所有其他用户client\u代码计数都不等于1(有x2 0003和x2 0001)。有什么想法吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    我想你只是想 group by 在子查询中:

    SELECT u.id, u.code 
    FROM web_users u JOIN
         (SELECT client_code
          FROM web_users_branches
          GROUP BY client_code
          HAVING COUNT(*) = 1
         ) c
         ON u.code = c.client_code;
    
        2
  •  0
  •   Psi    6 年前
    SELECT id, code 
    FROM web_users_branches as t1
    JOIN  web_users as t2
    ON t2.code = t1.client_code
    HAVING COUNT(*) = 1
    

    应该有用。在内部联接之后,当两个(!)同时存在时,只会得到一行表的开头只有一条记录。