好的,所以我有一个播放器表,其中包含以下重要字段。
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名玩家回复了此事件。
如果没有显示所有其他事件,我怎样才能显示尚未回复的玩家?
由于
答案 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以及其他所有人!