2011-04-20 130 views
0

我是mySql的新手,我试图使用来自其他几个表的数据从一列进行过滤查询。例如,我可以拉一张名称表,体育课中的一张表格以及一张运动表。MySQL WHERE XXX = ZZZ AND XXX = YYY

我可以查询使用

WHERE beta.sport = 'basketball';拉所有公测ID对篮球的和有效的所有谁打篮球的孩子们这个数据库。现在我想找到所有打篮球和Lacrosee的孩子。

WHERE beta.sport = 'basketball' AND beta.sport = 'lacrosse'; 

问题是查询执行正常,但返回零结果。我知道通过手动查看我的数据,发现有孩子打篮球和长曲棍球。你如何过滤打篮球和曲棍球的孩子?或者返回可以踢长曲棍球或篮球的孩子。我只想回到同时玩这两种游戏的孩子,而我唯一能够获得的体育项目就是来自这个表格测试版。

TABLE的β

beta_id - sport || 
1 - basketball || 
2 - lacrosse || 
3 - football || 
4 - basketball || 
+0

您所查询的说“篮球'AND beta.sport ='长曲棍球',但你在下一句话中说:“篮球和足球。”第二项运动是什么? – rajah9 2011-04-20 12:57:01

+0

你在那个查询中有长曲棍球,你是说足球吗?基本上你有使用AND或OR的选择。你也可以看看IN。 – ColWhi 2011-04-20 12:57:45

+0

除了Quassnoi之外,其他人都没有看到这一点。虽然ccdpowell在写一个简单的“AND”时确实错了,但他不想要“或”。当然,Quassnoi的解决方案假定链接表存在,并保存适当的信息,但它是迄今为止唯一能够给出正确方法的信息。 – anothershrubery 2011-04-20 13:01:06

回答

4
SELECT * 
FROM names n 
WHERE (
     SELECT COUNT(*) 
     FROM beta b 
     WHERE b.sport IN ('basketball', 'lacrosse') 
       AND b.name = n.id 
     ) = 2 
+0

谢谢! IN条款是我一直在寻找的,我不知道如何找到它。 – ccdpowell 2011-04-20 13:08:52

+0

@ccdpowell:'IN'子句只是'sport''basketball'或'sport''lacrosse''的简单别名。在你正在寻找的子查询中它是'COUNT(*)= 2'。 – Quassnoi 2011-04-20 13:16:33

0

“WHERE beta.sport = '篮球' AND beta.sport = '曲棍球';”这不能返回任何行,因为你要求beta.sport是篮球和长曲棍球...尝试或...在哪里beta.sport ='篮球'或beta.sport ='长曲棍球';

你可以尝试两者的子查询...

select * from sportsTable 
where itemID in 
(select itemID from sportsTable WHERE beta.sport = 'basketball') 
and itemID in 
(select itemID from sportsTable WHERE beta.sport = 'lacrosse') 
+0

我知道这是问题...如果我使用或我的结果将包括打篮球和不打长曲棍球的孩子。我只想得到那些同时打篮球和曲棍球的孩子的成绩。 – ccdpowell 2011-04-20 12:58:47

+0

请参阅上面的更新代码... – 2011-04-20 12:59:52

0
WHERE BETA.SPORT = 'BASKETBALL' OR BETA.SPORT = 'LACROSSE' 

注意去代替OR,AND。

1

你需要改变,并用OR

,不会手段:

我想谁打篮球的所有孩子和谁打曲棍球所有的孩子。

这是什么意思是我想要所有的都踢长曲棍球和篮球的孩子。

当使用或习惯括号包裹你的病情如此

WHERE(beta.sport = '篮球' OR beta.sport = '曲棍球')

相关问题