简体   繁体   English

使用JOIN过滤数据

[英]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有至少一个PositionStatus = 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM