gpt4 book ai didi

sql - 从左外连接获取不同的行

转载 作者:行者123 更新时间:2023-12-02 01:41:47 26 4
gpt4 key购买 nike

我正在构建一个应用程序,它动态生成 SQL 来搜索特定表的行(这是主域类,如 Employee)。

有三个表Table1、Table2和Table1Table2Map。Table1与Table2是多对多关系,通过Table1Table2Map表进行映射。但由于 Table1 是我的主表,因此关系实际上是一对多。

我的应用程序生成一个 sql,它基本上给出了一个包含所有这些表中的行的结果集。 select 子句和连接不会改变,而 where 子句是根据用户交互生成的。无论如何,我不希望结果集中出现重复的 Table1 行,因为它是结果显示的主表。现在生成的查询如下所示:

select distinct Table1.Id as Id, Table1.Name, Table2.Description from Table1
left outer join Table1Table2Map on (Table1Table2Map.Table1Id = Table1.Id)
left outer join Table2 on (Table2.Id = Table1Table2Map.Table2Id)

为了简单起见,我排除了 where 子句。问题是,当 Table2 中存在 Table1 的多行时,即使我已经说过与 Table1.Id 不同,结果集也具有 Table1 的重复行,因为它必须选择 Table2 中的所有匹配行。

为了详细说明,请考虑对于 Table1 中 Id = 1 的行,Table1Table2Map (1, 1) 和 (1, 2) 中有两行将 Table1 映射到 Table2 中 id 为 1, 2 的两行。对于这种情况,提到的查询返回重复的行。现在我希望查询仅返回一次 Id 为 1 的 Table1 行。这是因为 Table2 中只有一行类似于 Table1 中相应条目的事件值(此信息位于映射表中)。有没有办法避免获得 Table1 的重复行。

我认为我尝试解决问题的方式存在一些基本问题,但我无法找出它是什么。提前致谢。

最佳答案

尝试:

left outer join (select distinct YOUR_COLUMNS_HERE ...) SUBQUERY_ALIAS on ...

换句话说,不要直接联接表,而是联接限制您联接的行的子查询。

关于sql - 从左外连接获取不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/788984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com