MySQL查询加入

时间:2014-01-31 08:49:08

标签: mysql

我有一个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 = 3team_id = 0的承包商(本例中cont_id = 3,4,5)。

有没有办法通过单个MySQL查询实现这一目标?

4 个答案:

答案 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

http://www.sqlfiddle.com/#!2/b9efd/1

答案 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
                  )

Working Fiddle

<强>输出:

enter image description here

使用加入你可以这样做

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

Working Fiddle

<强>输出:

enter image description here