首页 > 解决方案 > 如果连接存在,则从连接表返回值

问题描述

我有两张表,下面有列

存货:

Id   Name    Price
 1   Item1    1€

和表

库存价格:

Id      Price
 1       2€

我只想为每个项目选择一行。如果存在连接,那么我需要从我的第一个表“Inventory”中选择“InventoryPrices”中的价格。到目前为止,如果“InventoryPrices”与第一个表“Inventory”连接,它会为每个 ID 返回两行。

相同的 ID

我如何检查连接是否不为空,然后显示第二个表价格的一行

标签: sqlsql-servertsqlsql-server-2008-r2

解决方案


要检查InventoryPrices表中是否存在记录,您需要使用LEFT JOIN要为每个 Id 获取一行,您可以使用ROW_NUMBER()如下查询。

 SELECT   *             
         from
         ( 
                   SELECT    t1.id, 
                             t1.NAME, 
                             COALESCE(t2.price,t1.price) AS price ,
                             Row_number() OVER(partition BY t1.id ORDER BY t1.id) rn 
                   FROM      inventory t1 
                   LEFT JOIN inventoryprices t2 
                   ON        t1.id=t2.id 
     ) t 
WHERE    t.rn=1

推荐阅读