我有一个MySQL问题。它与this other question that I asked previously有关,但略有不同。
我有2个表:团队,承包商
TEAMS
|team_id | location|
--------------------
| 1 | space1 |
--------------------
| 2 | space2 |
--------------------
| 3 | space3 |
--------------------
| 4 | space3 |
--------------------
CONTRACTORS
|cont_id | location| team_id|
-----------------------------
| 1 | space1 | 1 |
-----------------------------
| 2 | space1 | 0 |
-----------------------------
| 3 | space3 | 3 |
-----------------------------
| 4 | space3 | 3 |
-----------------------------
| 5 | space3 | 0 |
-----------------------------
| 6 | space3 | 4 |
-----------------------------
如果我获得了team_id,我想创建一个查询,查找位于给定team_id位置的所有承包商,并且只属于给定的team_id或team_id = 0
。 (承包商表中的team_id = 0
表示承包商目前不是团队的一部分)。
例如,我获得了team_id = 3.
team_id = 3
的团队位于space3。我想找到位于space3且仅属于team_id = 3
或team_id = 0
的承包商(本例中cont_id = 3,4,5)。
有没有办法通过单个MySQL查询实现这一目标?
答案 0 :(得分:2)
尝试这样
SELECT C.cont_id ,T.team_id,T.locations
FROM TEAM T
LEFT JOIN CONTRACTORS C ON T.team_id = C.team_id OR C.team_id = 0
WHERE T.team_id = 3
答案 1 :(得分:2)
试试这个:
select cont_id, c.team_id, c.location
from CONTRACTORS c join TEAM t
on c.team_id = t.team_id
where c.team_id = GIVEN_TEAM_ID or c.team_id = 0
答案 2 :(得分:1)
替代避免子查询: -
SELECT C.cont_id ,T.team_id,T.location
FROM TEAMS T
LEFT JOIN CONTRACTORS C
ON T.location = C.location
AND (T.team_id = C.team_id OR C.team_id = 0)
WHERE T.team_id = 3
答案 3 :(得分:0)
Select cont_id,team_id,location
FROM CONTRACTORS
where team_id = 3 or
team_id =0 and
location In
(
SElect location
from TEAMS
where team_id=3
)
<强>输出:强>
使用加入你可以这样做
SELECT C.cont_id ,C.team_id,T.location
FROM TEAMS T
LEFT JOIN CONTRACTORS C
ON T.location = C.location
AND (T.team_id = C.team_id OR C.team_id = 0)
where T.team_id= 3
<强>输出:强>