【问题标题】:select from table A when condition is met in table B在表 B 中满足条件时从表 A 中选择
【发布时间】:2016-02-01 22:59:34
【问题描述】:

不是最好的标题,因此为什么我找不到可以解决我问题的解决方案,如果您知道的话,请指出我的方向。

目前我有以下查询,

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

这本质上是一个非常简单的查询,它可以提取大量数据,我一直在使用 Excel 来深入了解我需要的数据,但是我相信您可以想象一个非常乏味的过程,所以最好更喜欢这样做我知道它可以直接用 SQL 来完成,只是我的知识在一段时间不使用后完全消失了。

但基本上我想要实现的是在一个位置在线查找所有在线产品(0 表示上述查询中的“是”)并且在另一个不在线的位置具有匹配的产品名称(在这种情况下不直播 = 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

如果有人可以提供解决方案或指出正确的方向,那就太好了,谢谢!

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    你想要这样的东西:

    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'
                 );
    

    【讨论】:

    • pt2.location &lt;&gt; pt.location 在我们检查live 时有点多余,但我想拥有它并没有什么坏处。
    • @kamilk 。 . .我想了想。 OP 不排除具有相同位置和不同 live 值的两行。
    • 不得不稍微改变一下,但基本上它起作用了,将 pt.live = '0' 更改为 1,将 select 1 /pt2.live = '1' 更改为 0。我还添加了 AND ORDER = ONLINE= .所以现在显示所有不活动的内容。我可能没有正确描述我的要求。谢谢!
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多