【问题标题】:SQL show all rows when one of them is in the where clause当其中之一在 where 子句中时,SQL 显示所有行
【发布时间】:2021-04-20 08:33:42
【问题描述】:

我有一张桌子,上面有成品及其组件。我想知道当组件之一在 where 子句中时,是否有一种方法可以过滤显示其所有组件的成品。

表格如下所示:

PRODUCT     COMPONENT
ARTICLE1        1
ARTICLE1        2
ARTICLE1        3
ARTICLE2        1
ARTICLE2        2
ARTICLE3        1
ARTICLE3        3

我想过滤掉没有组件 2 的产品:

PRODUCT     COMPONENT
ARTICLE1        1
ARTICLE1        2
ARTICLE1        3
ARTICLE2        1
ARTICLE2        2

我是这样做的:

   select      e.PRODUCT, e.COMPONENT
   from        STRUCTURE e
   INNER JOIN   (select e1.PRODUCT, e1.COMPONENT
                 from   STRUCTURE e1
                 where  e1.COMPONENT in (2)) e1 on e1.PRODUCT = e.PRODUCT

但是有没有更简单的方法呢?我想知道是否有一个我不知道的子句可以达到同样的效果。

非常感谢!

【问题讨论】:

  • EXISTS 似乎是最简单的方法。

标签: sql sql-server where-clause


【解决方案1】:

有很多方法可以实现这一点,下面列出了一些。

  1. 使用WHERE EXISTS:
SELECT PRODUCT,COMPONENT 
FROM STRUCTURE S
WHERE EXISTS (SELECT 1 FROM STRUCTURE WHERE COMPONENT = 2 AND S.PRODUCT = PRODUCT);
  1. 使用SUBQUERY:
SELECT PRODUCT,COMPONENT FROM STRUCTURE
WHERE PRODUCT IN (SELECT PRODUCT FROM STRUCTURE WHERE COMPONENT = 2);
  1. 使用CTE(Common Table Expression):
WITH CTE AS(
SELECT * FROM STRUCTURE WHERE COMPONENT = 2
)
SELECT S.PRODUCT,S.COMPONENT FROM STRUCTURE S
JOIN CTE C
  ON C.PRODUCT = S.PRODUCT;

【讨论】:

  • 。 .您应该限定所有列引用,尤其是在使用相关子查询时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2020-06-11
相关资源
最近更新 更多