使用JOIN过滤数据

时间:2019-06-23 12:18:48

标签: mysql sql

我在名为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      |

我正在尝试使用Projects获取所有至少具有一个Position的{​​{1}}。

Status = B

我已经尝试过使用| Project | Position | Status | |---------|----------|--------| | 2 | 1 | A | | 2 | 2 | B | | 3 | 1 | B | | 3 | 2 | B |

JOIN

这给了我一个空洞的答复。

3 个答案:

答案 0 :(得分:2)

使用login

EXISTS

或使用SELECT p.* FROM PROD p WHERE EXISTS ( SELECT 1 FROM PROD WHERE Project = p.Project AND Status = 'B' )

IN

如果要使用SELECT * FROM PROD WHERE Project IN (SELECT Project FROM PROD WHERE Status = 'B') 解决方案:

JOIN

请参见demo
结果:

SELECT DISTINCT p.* 
FROM PROD p JOIN PROD pp
ON pp.Project = p.Project 
WHERE pp.Status = 'B'

答案 1 :(得分:0)

您可以尝试在子查询中使用联接

select * from  PROD 
INNER JOIN (
  select  distinct project 
  from  PROD 
  where status ='B';
  ) t on t.project = PROD.project 

答案 2 :(得分:0)

  
    

我正在尝试获取所有状态至少为B的项目。

  

无需加入,只需执行以下操作:

SELECT DISTINCT PROD.Project WHERE PROD.Status ='B'