【问题标题】:mysql WHERE XXX = ZZZ AND XXX = YYYmysql WHERE XXX = ZZZ AND XXX = YYY
【发布时间】:2011-08-09 11:49:15
【问题描述】:

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

我可以使用

查询这个数据库

WHERE beta.sport = 'basketball'; 提取篮球的所有 beta id,实际上是所有打篮球的孩子。现在我想找到所有打篮球和 Lacrosee 的孩子。

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

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

表测试版

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

【问题讨论】:

  • 您的查询显示“篮球”和 beta.sport = '长曲棍球',但您在下一句中说“篮球和足球”。第二项运动是什么?
  • 您在该查询中使用了曲棍球,您是指足球吗?基本上你可以选择使用 AND 或 OR。你也可以看看 IN。
  • 除了 Quassnoi 之外的所有人都错过了似乎的重点。虽然 ccdpowell 在写一个简单的AND 时确实假设错了,但他不想要OR。当然,Quassnoi 的解决方案假设存在链接表并保存适当的信息,但它是迄今为止唯一给出正确方法的解决方案。

标签: mysql where in-clause where-in


【解决方案1】:

“哪里 beta.sport = '篮球' AND beta.sport = '长曲棍球';”这不能返回任何行,因为您要求 beta.sport 既是篮球又是曲棍球...尝试 OR... 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') 

【讨论】:

  • 我知道这是问题所在...如果我使用 OR,我的结果将包括打篮球但不打长曲棍球的孩子。我只想要同时打篮球和长曲棍球的孩子的成绩。
【解决方案2】:
SELECT  *
FROM    names n
WHERE   (
        SELECT  COUNT(*)
        FROM    beta b
        WHERE   b.sport IN ('basketball', 'lacrosse')
                AND b.name = n.id
        ) = 2

【讨论】:

  • 谢谢! IN 子句是我要找的,但我不知道如何找到它。
  • @ccdpowell: IN 子句只是sport = 'basketball' OR sport = 'lacrosse' 的一个方便的别名。它是您实际上一直在寻找的子查询中的COUNT(*) = 2。
【解决方案3】:

你需要用 OR 来改变 AND

AND 不表示:

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

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

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

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

【讨论】:

    【解决方案4】:
    WHERE BETA.SPORT = 'BASKETBALL' OR BETA.SPORT = 'LACROSSE'
    

    注意 OR,而不是 AND。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2014-05-25
      • 2013-01-23
      • 2014-03-30
      相关资源
      最近更新 更多