【问题标题】:MySQL query to get all users belonging to an organizationMySQL查询以获取属于组织的所有用户
【发布时间】:2020-03-24 11:06:39
【问题描述】:

我有一个相当大的数据库(不是我设计的),我需要从中获取一些数据。我需要找到属于一个组织的所有用户。有一个看起来像这样的用户表;

id
name
email
password
more fields

还有这样的组织表;

id
name
org_number
contact_person
more fields

还有一个 user_orgs 表,通过它与其他表相关;

id
user_id
org_id

给定一个 org_number,我希望能够获取该组织中每个用户的姓名和电子邮件地址。

我试过了

SELECT 
   per.name, 
   per.email, 
   org.name AS orgname, 
   org.org_number, 
   org.contact_person 
FROM users AS per 
LEFT JOIN user_orgs AS uorgs 
ON per.id=uorgs.org_id 
LEFT JOIN organization AS org 
ON uorgs.org_id=org.id 
WHERE org.org_number=123456;

连同一堆其他查询,我知道应该有 20 个用户注册到组织编号 123456,但它返回空。

我该怎么做?

【问题讨论】:

  • ON per.id=uorgs.org_id => 将用户表加入到用户 id 与地图组织 id 匹配的地图?

标签: mysql sql mariadb


【解决方案1】:

您的JOIN 条件看起来不正确:

SELECT u.name, u.email, 
       o.name as orgname, o.org_number, o.contact_person 
FROM users u JOIN
     user_orgs uo 
     ON u.id = uo.user_id JOIN
------------------^  -- this changes
     organization o
     ON uo.org_id = o.id 
WHERE o.org_number = 123456;

【讨论】:

  • 为什么 LEFT 加入组织?
  • @Akina 显然是因为我不知道自己在做什么......这就是我寻求帮助的原因。感谢您提出有用的问题。
  • @JimiWindmills 答案中的加入是 INNER(因为 organization 表的条件适用于 WHERE) - 所以使用 LEFT 代替 INNER 对服务器来说是额外且毫无意义的工作。
猜你喜欢
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2020-05-22
相关资源
最近更新 更多