2011-05-10 96 views
0

我在mysql数据库3个表:PLAYERSSPORTSINTERESTS帮助与SQL查询

PLAYERS表包含ID和表演者姓名(id,player_name)

数据例如:

(1,David) 
(2,Jack) 
(3,Ron) 
(4,Smith) 

SPORTS表包含ID和体育名称(id,sports_name)

数据例如:

(1,Soccer) 
(2,Tennis) 
(3,Swimming) 

每个玩家可能有兴趣在多个运动使INTERESTS表有玩家ID和体育ID。 (player_id,sports_id)

数据例如:

(1,2) 
(1,3) 
(2,3) 

我想显示玩家的名字那些谁踢足球和网球。
不是足球或网球,但足球和网球。

任何人都可以帮助我吗?

回答

0

未经检验的,但我觉得这样的事情可能工作:

SELECT 
    player_name 
FROM 
    players 
WHERE 
    EXISTS (SELECT id FROM interests i WHERE i.player_id = players.id AND i.sports_id = 1) 
    AND EXISTS (SELECT id FROM interests i WHERE i.player_id = players.id AND i.sports_id = 2) 
+0

谢谢罗伊的帮助 – Gautam 2011-05-12 17:33:15

2
Select P.id, P.player_name 
From Players As P 
    Join Interests As I 
     On I.player_id = P.id 
    Join Sports As S 
     On S.id = I.sports_id 
Where S.sports_name In('Tennis','Soccer') 
Group By P.id, P.player_name 
Having Count(Distinct S.sports_name) = 2 
+2

我想你可能会比玩家姓名以外的东西想组,对不对? player.id列是唯一的,但我不会假设player_name是。如果球员(1,'鲍勃史密斯')喜欢足球和球员(2,'鲍勃史密斯')喜欢网球,我认为这会给我们一个错误。 – andrewmitchell 2011-05-10 17:32:27

+0

您还应该确保在兴趣表中有(player_id,sports_id)的唯一约束(或者确保所有行保持唯一)。因为否则,单个玩家可以将他对足球的兴趣列出两次并且将由查询选择。 – Roy 2011-05-10 17:37:15

+0

@drewbob - 用户如何知道他们是否在查看重复?即,用户如何知道(1,Bob Smith)是否与(2,Bob Smith)相同。仍然,一个简单的修复。 – Thomas 2011-05-10 18:27:10