[英]Using JOIN to filter data
I have this data in a table called PROD
我在名为PROD
的表中有此数据
| Project | Position | Status |
|---------|----------|--------|
| 1 | 1 | A |
| 1 | 2 | A |
| 2 | 1 | A |
| 2 | 2 | B |
| 3 | 1 | B |
| 3 | 2 | B |
| 4 | 1 | A |
| 4 | 2 | A |
I'm trying to get all the Projects
that has at least one Position
with Status = B
. 我试图让所有的Projects
有至少一个Position
与Status = B
。
| Project | Position | Status |
|---------|----------|--------|
| 2 | 1 | A |
| 2 | 2 | B |
| 3 | 1 | B |
| 3 | 2 | B |
I've tried using a JOIN
like this: 我试过使用这样的JOIN
:
SELECT * FROM PROD A JOIN PROD B ON A.PROD-Project = B.PROD-Project WHERE B.PROD-Status = 'B'
This give me an empty response. 这给了我一个空洞的回应。
With EXISTS
: 具有EXISTS
:
SELECT p.* FROM PROD p
WHERE EXISTS (
SELECT 1 FROM PROD
WHERE Project = p.Project AND Status = 'B'
)
or with IN
: 或使用IN
:
SELECT * FROM PROD
WHERE Project IN (SELECT Project FROM PROD WHERE Status = 'B')
If you want a solution with JOIN
: 如果您想使用JOIN
解决方案:
SELECT DISTINCT p.*
FROM PROD p JOIN PROD pp
ON pp.Project = p.Project
WHERE pp.Status = 'B'
See the demo . 参见演示 。
Results: 结果:
> Project | Position | Status
> ------: | -------: | :-----
> 2 | 1 | A
> 2 | 2 | B
> 3 | 1 | B
> 3 | 2 | B
You could try using a join wit the subquery 您可以尝试使用联接与子查询
select * from PROD
INNER JOIN (
select distinct project
from PROD
where status ='B';
) t on t.project = PROD.project
I'm trying to get all the Projects that has at least one Position with Status = B. 我正在尝试获取所有状态至少为B的项目。
No need for a JOIN, just do: 无需加入,只需执行以下操作:
SELECT DISTINCT PROD.Project WHERE PROD.Status='B' SELECT DISTINCT PROD.Project WHERE PROD.Status ='B'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.