0

我是 mySql 的新手,正在尝试使用其他几个表中的数据从一列中进行过滤查询。例如,我可以拉出一张姓名表、一张他们在体育课上的分数表和一张运动表。

我可以使用查询这个数据库

WHERE beta.sport = 'basketball';拉出所有的篮球测试版 ID,实际上是所有打篮球的孩子。现在我想找到所有打篮球和 Lacrosee 的孩子。

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

问题是查询执行良好,但返回零结果。通过手动查看我的数据,我知道有些孩子会打篮球和长曲棍球。您如何过滤既打篮球又打长曲棍球的孩子?OR 返回玩长曲棍球或篮球的孩子。我只想返回既玩又玩的孩子,而我对运动列表的唯一访问权限是来自这张表测试版。

表测试版

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

4 回答 4

4
SELECT  *
FROM    names n
WHERE   (
        SELECT  COUNT(*)
        FROM    beta b
        WHERE   b.sport IN ('basketball', 'lacrosse')
                AND b.name = n.id
        ) = 2
于 2011-04-20T12:57:01.617 回答
1

您需要使用 OR 更改 AND

AND 并不意味着:

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

这意味着我想要所有既打长曲棍球又打篮球的孩子。

当使用 OR 习惯于将你的条件用括号括起来时

在哪里(beta.sport = 'basketball' 或 beta.sport = 'lacrosse')

于 2011-04-20T12:56:36.470 回答
0

“哪里 beta.sport = '篮球' AND beta.sport = '长曲棍球';” 这不能返回任何行,因为您要求 beta.sport 既是篮球又是曲棍球...尝试或... WHERE beta.sport = 'basketball' OR beta.sport = 'lacrosse';

您可以尝试两者的子选择...

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') 
于 2011-04-20T12:55:51.303 回答
0
WHERE BETA.SPORT = 'BASKETBALL' OR BETA.SPORT = 'LACROSSE'

注意 de OR,而不是 AND。

于 2011-04-20T12:56:21.493 回答