DB2 SQL 如何从内部联接表返回 1 行
Posted
技术标签:
【中文标题】DB2 SQL 如何从内部联接表返回 1 行【英文标题】:DB2 SQL HOW TO RETURN 1 ROW ON JOIN TABLE FROM INNER JOIN TABLE 【发布时间】:2021-08-17 18:31:34 【问题描述】:SELECT GARAGE, MAKE
FROM NEIGHBORHOOD_TABLE A
JOIN VEHICLES_TABLE B ON B.MAKE = A.MAKE DISTINCT BY B.MAKE
WHERE A.ZIPCODE = MY_ZIP_CODE
;
现在我想用福特品牌退回我邮政编码中的所有车库。现在,Vehicles-Table 可以在连接时有多个 FORD Makes 模型,但我只想返回 1 行 FORD make 不是所有模型 FUSION、RANGER、F150 ....可能是一个不好的例子,但想法是我想要从表 A 返回与表 B 匹配的多行,但是表 B 可能有多个与表 A 匹配的行,但我只想要 1 行,与 B.MAKE 不同。
这是一个 DB2 SQL 数据库。 谢谢,如果你能弄清楚我在问什么。
【问题讨论】:
请提供实际数据集示例 【参考方案1】:我能想到的最简单的解决方案是使用ROW_NUMBER()
。例如
select *
from (
select
a.garage,
a.make,
row_number() over(partition by a.make order by b.id) as rn
from neighborhood_table a
join vehicles_table b on b.make = a.make
where a.zipcode = 12345
) x
where rn = 1
请注意,当每个品牌有多个行时,您需要添加一个排序标准来决定选择哪一行;我添加了order by b.id
,但您应该根据您的条件进行更改。
或者,您可以使用横向查询来获取每个组的单行。
【讨论】:
@NathanHughesROW_NUMBER()
在 DB2 中运行良好。请参阅dbfiddle.uk/… 的运行示例
很好,我不知道,以为它是特定于 MS SQL 和 oracle 的。【参考方案2】:
试试这个:
SELECT A.GARAGE, A.MAKE
FROM NEIGHBORHOOD_TABLE A
JOIN
(
SELECT DISTINCT MAKE
FROM VEHICLES_TABLE
) B ON B.MAKE = A.MAKE
WHERE A.ZIPCODE = MY_ZIP_CODE
【讨论】:
以上是关于DB2 SQL 如何从内部联接表返回 1 行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spark sql 在 Databricks 中使用内部联接更新 Databricks Delta 表