繁体   English   中英

如何在联接三个表时从第三表中获取第一行值

[英]How to get first row value from third table while joining three tables

我是mssql的新手。这里试图通过连接三个表从数据库中获取值。

表格1:

在此处输入图片说明

表2:

在此处输入图片说明

在此图像中,单个用户有可能具有多个图像ID,我需要拍摄其中任何一个图像。

表3 :

在此处输入图片说明

这里通过使用H_ID将表1和表2以及通过使用IMG_ID将表2和表3结合在一起。

我想要做的是需要从表1和表2中获得所有列值,但要从表3中获得第一个URL。

在这种情况下,一个员工在表中有多个图像,我需要使用1个URL。

结果应该是这样的:

在此处输入图片说明

查询:

SELECT T1.H_ID AS 'ID',
       T1.NAME,
       T1.ROLE,
       T2.SALARY,
       T3.IMAGE 
FROM TABLE1 T1 

JOIN TABLE2 T2 
ON T1.H_ID T2.H_ID  

JOIN TABLE3 T3 
ON T3.IMG_ID = T2.IMG_ID 

WHERE T1.STATUS = 'ACTIVE'

现在,此查询返回ID为H_ID = 1001的3行,但应为单行。

谁能帮我解决这个问题。

使用row_number()

with cte as

(SELECT T1.H_ID AS 'ID',T1.NAME,T1.ROLE,T2.SALARY,T3.IMAGE 
,row_number() over(partition by T2.img_id order by T3.id) rn
FROM TABLE1 T1 

JOIN TABLE2 T2 
ON T1.H_ID T2.H_ID  

JOIN TABLE3 T3 
ON T3.IMG_ID = T2.IMG_ID WHERE T1.STATUS = 'ACTIVE'

) select * from cte where rn=1

发表评论后,您似乎需要子查询

select T1.*,T2.sal,a.url
    FROM TABLE1 T1     
    JOIN TABLE2 T2 
    ON T1.H_ID T2.H_ID
    left join ( select min(id),img_id,url from table3 group by img_id,url) a
    on T2.IMG_ID= a.img_id
  WHERE T1.STATUS = 'ACTIVE'

我认为,您可以简单地使用OUTER APPLYTOP 1

SELECT T1.H_ID AS 'ID',
       T1.NAME,
       T1.ROLE,
       T2.SALARY,
       T3.IMAGE 
FROM TABLE1 T1 
JOIN TABLE2 T2 ON T1.H_ID T2.H_ID  
OUTER APPLY(SELECT TOP 1 T3.IMAGE 
            FROM TABLE3 T3 WHERE T3.IMG_ID = T2.IMG_ID 
            --ORDER BY <column_name> --to take top 1 value in specific order
            ) T3        
WHERE T1.STATUS = 'ACTIVE'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM