SQL 当其中一行在 where 子句中时显示所有行

SQL show all rows when one of them is in the where clause

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

table 看起来像这样:

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

但是有更简单的方法吗?我想知道是否有一个我不知道的条款可以达到同样的效果。

非常感谢!

实现这一点的方法有很多,下面列出了其中的几种。

  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;