Mysql&加入获得理想的结果

时间:2015-11-20 12:25:17

标签: mysql

好的,所以我有一个播放器表,其中包含以下重要字段。

id| team_id| first_name| last_name

我还有一个名为event_player表的数据透视表,其中包含以下字段。

event_id| player_id| availability| availability_notes

现在我需要获取为team_id = 1播放的所有用户,但是还要显示同一个sql中event_player表中是否可以使用该事件。

如果我跑

select * from `players` where team_id=1 ; 

我将取回当前为team_id 1玩的所有17名球员

但我现在需要查看它们是否可用,所以我尝试了

select * from `players`  
     JOIN event_player
ON event_player.player_id=players.id where team_id=1 and event_id=1 ;

但这仅显示event_player中存在的玩家,并且在当天只有10名玩家回复了此事件。

如果没有显示所有其他事件,我怎样才能显示尚未回复的玩家?

由于

4 个答案:

答案 0 :(得分:1)

您应该使用left join。 它还将为您提供仅出现在第一个表中的reaults

答案 1 :(得分:1)

假设列可用性为varchar,请尝试:

SELECT * 
FROM player p 
LEFT JOIN event_player e ON p.`id`=e.`player_id` 
WHERE p.`team_id`=1 AND p.`id` IN(
SELECT ee.`player_id`  
FROM event_player ee 
WHERE ee.`availability`='Yes');

答案 2 :(得分:0)

SELECT *
 FROM `players`  
    LEFT JOIN `event_player` ON event_player.`event_id`=1
ON event_player.player_id=players.id where team_id=1 ;

希望这有帮助。

答案 3 :(得分:0)

...排序

SELECT *
 FROM `players`  
    LEFT JOIN `event_player` 
    ON event_player.`event_id`=1
    AND event_player.player_id=players.id where team_id=1 ;

感谢Subin C Poonamgode以及其他所有人!