【问题标题】:How to do proper join?如何正确加入?
【发布时间】:2019-07-21 10:30:35
【问题描述】:

您好,我有几个用于仪表板、用户、user_dahboard、user_organisation 的表。下面是表架构。

dashboard_user

id   user_id    dashboard_id
1       2         1
2       1         1
3       4         2
4       1         2

org_user

id   user_id    org_id
1      1         1
2      2         1
3      3         2
4      4         2

仪表板

id  dashboard_title
1   World's Bank Data
2   Births
3   Unicode Test

现在我想从同一个组织用户那里获取所有仪表板。就像用户 id 1 可以看到由同一组织用户开发的所有仪表板。我做了同样的查询

SELECT 
    dashboards.id AS dashboards_id 
FROM 
    dashboards 
    JOIN dashboard_user AS dashboard_user_1 ON dashboards.id = dashboard_user_1.dashboard_id 
        JOIN organization_user AS organization_user_1 ON organization.id = organization_user_1.org_id 
    JOIN ab_user ON ab_user.id = dashboard_user_1.user_id 
WHERE ab_user.id = 1

对于 where 条件 usr_id=1 的预期结果应该返回属于与 user1 具有相同组织的用户的所有dashboard_id。

结果

user    org      dashboard
1        1        1
2        1        2

【问题讨论】:

  • 你得到了什么结果?此外,您为什么要使用两个 DBMS 进行标记?
  • 我希望为来自同一组织的用户过滤仪表板。就像我把 where user = 1 比它应该给属于同一组织用户的所有仪表板一样。
  • 您能在问题中分享预期的样本结果吗?
  • “可以看到同一组织用户开发的所有仪表盘”是什么意思?
  • 你的结果是错误的,如何期望属于同一组织的用户创建的仪表板,org 列有 2 个不同的值!

标签: mysql sql postgresql


【解决方案1】:

我不确定是否需要任何 JOIN。如果您只想要给定用户的仪表板:

SELECT du.dashboards_id 
FROM dashboard_user du
WHERE du.user_id = 1;

如果您想要来自与user_id = 1 相同组织的所有仪表板,那么:

SELECT DISTINCT du.dashboards_id 
FROM dashboard_user du
WHERE du.user_id IN (SELECT ou.user_id
                     FROM org_user ou JOIN
                          org_user ou1
                          ON ou.org_id = ou1.org_id
                     WHERE ou1.user_id = 1
                    );

或者,作为JOIN

SELECT DISTINCT du.dashboards_id 
FROM dashboard_user du JOIN
     org_user ou
     ON du.user_id = ou.user_id JOIN
     org_user ou1
     ON ou1.org_id = ou.ord_id AND
        ou1.user_id = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2015-08-28
    • 2023-02-22
    • 2011-10-15
    • 2017-06-23
    • 2019-11-15
    相关资源
    最近更新 更多