sql - 在一个语句中选择两个表的联接中的第一行

标签 sql db2

我只需要从连接表A和B的查询中选择第一行。在表B上存在多个具有相同名称的记录。两个表中的任何一个都没有标识符。我也不能更改方案,因为我没有数据库。

TABLE A
NAME

TABLE B
NAME
DATA1
DATA2

Select Distinct A.NAME,B.DATA1,B.DATA2 
From A 
Inner Join B on A.NAME = B.NAME

这给了我
NAME       DATA1    DATA2
sameName   1        2
sameName   1        3
otherName  5        7
otherName  8        9

但每个名称我只需要检索一行
NAME       DATA1    DATA2
sameName   1        2
otherName  5        7

通过将结果添加到带有标识列的临时表中,然后选择每个名称的最小ID,我能够做到这一点。

这里的问题是我需要在一个语句中执行此操作。

最佳答案

这将起作用:

with temp as (
    select A.NAME, B.DATA1, B.DATA2, 
        row_number() over (partition by A.NAME order by A.NAME) as rownum
    from TABLEA A inner join TABLEB B
    on A.NAME = B.NAME
)
select NAME, DATA1, DATA2 from temp where rownum = 1

如果要选择data1的最小值并在其中选择data2的最小值,请使用以下变化形式:
with temp as (
    select A.NAME, B.DATA1, B.DATA2, 
        row_number() over (partition by A.NAME order by B.DATA1, B.DATA2) as rownum
    from TABLEA A inner join TABLEB B
    on A.NAME = B.NAME
)
select NAME, DATA1, DATA2 from temp where rownum = 1

这两个查询将为每个名称给出一行。

关于sql - 在一个语句中选择两个表的联接中的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/774769/

相关文章:

java - 跨集群共享 Java 同步块(synchronized block),还是使用全局锁?

PHP IBM DB2 错误

db2 不监听本地主机上的 TCPIP 连接

sql server group by datetime 截止点 10 :00am

db2 - 如何限制 DB2 CLP (z/OS) 中返回的字段的显示长度?

sql - Google BigQuery <EOF> 中的错误

android - 在现有 SQLITE 中创建附加表(无数据丢失)

java - 发生 DB2 连接授权失败原因 : Security Mechanism not supported in Java

mysql - 用于更新查询的 SQL。

sql - 此 Sql Server 查询中的 CTE 语法有什么问题?