【问题标题】:Conditional MySQL Query条件 MySQL 查询
【发布时间】:2011-04-02 10:36:05
【问题描述】:

我有一个包含列的表:conditional1、conditional2、data。如果其中任何行还包含条件 2 = 值 2,我需要返回条件 1 = 值 1 的所有行。我该怎么做?

编辑:我的问题有些混乱。

如果你有列

`条件1 |有条件的2 |数据

一个 |一个 |一个

一个 |乙|一个`

如果 conditional1 = A 和 conditional2 = B,我想返回两行

编辑 2:仍有一些混乱。

这是另一个例子:

有条件的1 |有条件的2 |数据

1 | 1 |一个

1 | 2 |乙

2 | 1 | C

2 | 2 | D

如果 conditional1 = 1 且 conditional2 = 1,它应该返回

1 | 1 |一个

1 | 2 |乙

如果 conditional1 = 2 和 conditional2 = 1,它应该返回

2 | 1 | C

2 | 2 | D

如果 conditional1 = 2 和 conditional2 = 2,它应该返回

2 | 1 | C

2 | 2 | D

如果 conditional1 = 2 和 conditional2 = 3,它应该不返回任何行。

【问题讨论】:

  • 您是坚持查询本身,还是在 PHP 中实现它,或者?
  • 我编辑了这个问题,因为有些混乱。
  • 你的问题仍然没有意义。 (也许这就是所有现有答案都不正确的原因。)你的意思是 if conditional1 = A OR conditional2 = B?
  • 你没有说清楚。马克贝克按原样回答了这个问题
  • 什么条件决定是否返回第一行?通过您的编辑,这非常不清楚......是什么将第一行链接到第二行以表示即使 conditional2 不是“B”也应该返回它?

标签: php mysql


【解决方案1】:
select *
from tbl A
where conditional1 = 'A'
and exists (
  select * from tbl B
  where B.conditional1 = 'A' and B.conditional2 = 'B')

或对 MySQL 更友好的版本

select * from tbl
where conditional1 in
(
    select conditional1 
    from tbl
    where conditional1 = 'A' and conditional2 = 'B'
)

【讨论】:

  • 我尝试了您的第二个版本,但出现语法错误:select * from table where conditional1 in ( select conditional1 from table where conditional1 = 1 and conditional2 = 1 )
  • 如果您使用文字“table”,那显然是错误的。否则我至少在 MySQL 和 SQL Server 中检查了语法,两者都很好
  • 你说得对——在示例中使用“table”并不是最明智的做法。你的回答很好。谢谢!
  • 啊,我明白了。我认为=DISTINCT 仍然可能比this OP's experience 中的IN 表现更好?
  • @Martin / 好的,现在知道了。我应该使用'='。但这是一个非常简单的查询,所以 bug 不会咬人?我倾向于单独留下未经编辑的答案,因为它看起来..干净:)
【解决方案2】:
SELECT * FROM table 
    WHERE conditional1 = 'A' AND 1 IN 
        ( SELECT 1 FROM table WHERE conditional1 = 'A' AND conditional2 = 'B' LIMIT 1 )

我想我终于明白了!

【讨论】:

  • 对不起,我这边有问题:#1235 - 这个版本的 MySQL 还不支持 'LIMIT & IN/ALL/ANY/SOME 子查询'
猜你喜欢
  • 2011-11-16
  • 2013-05-09
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2011-08-10
  • 2012-10-30
  • 2017-03-21
相关资源
最近更新 更多