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
但是有更简单的方法吗?我想知道是否有一个我不知道的条款可以达到同样的效果。
非常感谢!
实现这一点的方法有很多,下面列出了其中的几种。
- 使用
WHERE EXISTS
:
SELECT PRODUCT,COMPONENT
FROM STRUCTURE S
WHERE EXISTS (SELECT 1 FROM STRUCTURE WHERE COMPONENT = 2 AND S.PRODUCT = PRODUCT);
- 使用
SUBQUERY
:
SELECT PRODUCT,COMPONENT FROM STRUCTURE
WHERE PRODUCT IN (SELECT PRODUCT FROM STRUCTURE WHERE COMPONENT = 2);
- 使用
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;
我有一个 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
但是有更简单的方法吗?我想知道是否有一个我不知道的条款可以达到同样的效果。
非常感谢!
实现这一点的方法有很多,下面列出了其中的几种。
- 使用
WHERE EXISTS
:
SELECT PRODUCT,COMPONENT
FROM STRUCTURE S
WHERE EXISTS (SELECT 1 FROM STRUCTURE WHERE COMPONENT = 2 AND S.PRODUCT = PRODUCT);
- 使用
SUBQUERY
:
SELECT PRODUCT,COMPONENT FROM STRUCTURE
WHERE PRODUCT IN (SELECT PRODUCT FROM STRUCTURE WHERE COMPONENT = 2);
- 使用
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;