在表B中满足条件时从表A中选择

时间:2016-02-01 22:59:34

标签: sql sql-server

不是最好的标题,因此我无法找到能解决我的问题的解决方案,如果你知道一个,请指出我的方向。

目前我有以下查询,

SELECT PRODUCT_NAME
      ,LIVE
      ,LOCATION
FROM PRODUCT_TABLE
WHERE ORDER = 'ONLINE'
AND LIVE = '0' OR '1'

这本质上是一个非常简单的查询,可以回收大量数据,我一直在使用Excel深入到我需要的东西,但是我相信你可以想象一个非常繁琐的过程,所以最好更喜欢做它直接用SQL,因为我知道它可以完成,只是我的知识在一段时间不使用它后完全消失了。

但基本上我想要实现的是在线查找所有在线的产品(0表示上述查询中的YES),并且在另一个非现场的位置具有匹配的产品名称(在这种情况下)不活= 1)。

例如,下面是一些以类似方式格式化的数据。

LOCATION    LIVE    PRODUCT_NAME
BERLIN      0       CHAIR
LONDON      1       CHAIR
PARIS       0       LAMP
PARIS       0       SOFA
WARSAW      1       CHAIR
MADRID      0       CHAIR
MANCHESTER  1       SOFA

如果有人可以提供解决方案或指出我的方向非常好,谢谢!

2 个答案:

答案 0 :(得分:2)

你想要这样的东西:

select pt.*
from product_table pt
where pt.live = '0' and
      exists (select 1
              from product_table pt2
              where pt2.product_name = pt.product_name and
                    pt2.location <> pt.location and
                    pt2.live = '1'
             );

答案 1 :(得分:0)

SELECT DISTINCT
       pt.PRODUCT_NAME
      ,pt.LIVE
      ,pt.LOCATION
FROM PRODUCT_TABLE pt
LEFT JOIN PRODUCT_TABE pt2
    on pt.NAME = pt2.NAME 
        AND pt2.LIVE = 1 
        AND pt.LOCATION != pt2.LOCATION
WHERE pt.ORDER = 'ONLINE'
AND pt.LIVE = '0'
AND pt2.NAME IS NOT NULL