首页 > 解决方案 > SQL选择名称相同但价格不同的行

问题描述

我有 2 张桌子COMMODITY_NewCOMMODITY_Old每张桌子都有一些行。我需要从中选择COMMODITY_New具有名称COMMODITY_Old.NAME但价格不同的行。

例子:

COMMODITY_New:

+------+------+
|Name  |Price |
+------+------+
|Apple |200   |
|Socks |100   |
+------+------+

COMMODITY_旧:

+------+------+
|Name  |Price |
+------+------+
|Apple |180   |
|Socks |100   |
+------+------+

新的价格并不总是更高。

我的 SQL 代码:

SELECT 
    NAME, PRICE
FROM 
    COMMODITY_New
WHERE 
    COMMODITY_New.NAME IN (SELECT NAME FROM somedb2.COMMODITY_Old) 
    AND COMMODITY_New.PRICE = (SELECT PRICE FROM somedb2.COMMODITY_Old)

标签: sqlselect

解决方案


您可以使用EXISTS

select n.*
from commodity_new n
where exists (select 1
              from commodity_old o
              where o.name = n.name and o.price <> n.price
             );

推荐阅读