当我内部连接时,我得到重复的行,如何正确编写 sql

When I inner join, I get duplicate rows, how to properly write sql

我正在尝试创建一个我在编写查询时似乎总是卡住的场景。

我希望 sql 输出只是来自用户 table 的用户列表,没有额外的列或重复的行。

我拥有的 table 是:

Users
Locations
Location_Types
Location_Types_Zones

下面的查询正是我所追求的,但是当我开始使用 location_type_zone table 进行 INNER JOIN 时,问题就出现了。这最终会破坏结果集(就我想要的而言)。如果我要删除 location_type_zone 内部连接和 location_type table 我还需要连接到 属性 连接区域 table,格式输出将是正确的,但正确性将关闭,因为我没有按确切的 location_types 'A'、'B'、'C'.

进行过滤
SELECT u.*
FROM Users u.
    INNER JOIN Locations l
        ON u.location_id = l.location_id
    INNER JOIN location_types lt
        ON l.location_type = lt.location_type_id
    INNER JOIN location_types_zones ltz
        ON lt.location_types_zone_id = ltz.location_types_zone_id
WHERE u.approved = 1
    AND ltz.location_types_zone_code IN ('A', 'B', 'C')

解决此类问题的最佳方法是什么sql "issue"?

已更新 我根据评论更新了修复程序,对此感到抱歉。

可读的方法是 exists 子句:

SELECT  *
FROM    Users u
WHERE   approved = 1
        AND EXISTS
        (
        SELECT  *
        FROM    Locations l
        JOIN    location_types lt
        ON      l.location_type = lt.location_type_id
        JOIN    location_types_zones ltz
        ON      lt.location_types_zone_id = ltz.location_types_zone_id
        WHERE   u.location_id = l.location_id
                AND ltz.location_types_zone_code IN ('A', 'B', 'C')
        )

或者,作为过滤 join,例如:

SELECT  u.*
FROM    Users u
JOIN    (
        SELECT  DISTINCT l.location_id
        FROM    Locations l
        JOIN    location_types lt
        ON      l.location_type = lt.location_type_id
        JOIN    location_types_zones ltz
        ON      lt.location_types_zone_id = ltz.location_types_zone_id
        WHERE   lt.location_types_zone_code IN ('A', 'B', 'C')
        ) loc
ON      u.location_id = loc.location_id
WHERE   approved = 1