DB2 SQL如何从内部连接表返回连接表上的1行

f8rj6qna  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(213)
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品牌的型号,但我只想返回FORD品牌的一行,而不是所有型号FUSION、RANGER F150型......这可能是一个糟糕的示例,但我的想法是,我希望从表A中返回多个与表B匹配的行,但是表B可能有多个与表A匹配的行但我只需要1行,通过B. MAKE区分。
这是一个DB2 SQL数据库。如果你能弄清楚我在问什么,谢谢。

ckocjqey

ckocjqey1#

我能想到的最简单的解决方案是使用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

请注意,当每个make有多个行时,您需要添加一个排序标准来决定选择哪一行;我添加了order by b.id,但您应该根据您的标准进行更改。
或者,您可以使用横向查询来为每个组获取一行。

tyu7yeag

tyu7yeag2#

试试看:

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

相关问题