【问题标题】:MySQL : Select records with conditions that applies to multiple rowsMySQL:选择条件适用于多行的记录
【发布时间】:2013-02-18 22:07:08
【问题描述】:

我有一张桌子:

详情

--------------------------------------------------------
ID    |   PARENT_ID    |    DATA_KEY     |   DATA_VALUE
======================================================== 
1     |      1         |     Guitar      |      4
--------------------------------------------------------
2     |      1         |     Radio       |      2
--------------------------------------------------------
3     |      1         |     Tv          |      2
--------------------------------------------------------
4     |      1         |     Drum Kit    |      3
--------------------------------------------------------
5     |      2         |     Guitar      |      4
--------------------------------------------------------
6     |      2         |     Radio       |      2
--------------------------------------------------------
7     |      2         |     Tv          |      2
--------------------------------------------------------
8     |      2         |     Drum Kit    |      3
--------------------------------------------------------
9     |      3         |     Guitar      |      1
--------------------------------------------------------
10    |      3         |     Radio       |      2
--------------------------------------------------------
11    |      3         |     Tv          |      2
--------------------------------------------------------
12    |      3         |     Drum Kit    |      3
--------------------------------------------------------

如何在mysql中选择满足以下条件的不同PARENT_ID:

    1. DATA_KEY = '吉他' 和 DATA_VALUE = '4'
    1. DATA_KEY = '收音机'和 DATA_VALUE = '2'

查询的预期输出应该是

-------------
PARENT_ID
=============
  1
-------------
  2
-------------

因为只有 PARENT_ID 1 和 2 有 'Guitar' = '4' 和 'Radio' = '2'

【问题讨论】:

  • 我已经尝试 SELECT DISTINCT PARENT_ID FROM DETAILS WHERE (DATA_KEY = 'Guitar' AND DATA_VALUE = '4') AND (DATA_KEY = 'Radio' AND DATA_VALUE = '2') 但它返回给我空数据
  • 使用 OR 代替 AND(括号外的那个)
  • 我已经回答了一个可以得到你想要的东西的查询。但是,我不明白为什么这对您有用。坦率地说,整个数据设置在我看来是有问题的 - 我猜想了解使用需要更多的表架构知识。
  • 老兄,你的回答错了。它将返回 PARENT_ID 1,2 和 3。
  • 我不会要求一些对我或可能遇到同样麻烦的人没有用的东西。无论如何感谢您的错误回答。

标签: mysql sql select row


【解决方案1】:
SELECT DISTINCT a.parent_id 
FROM details AS a
JOIN details AS b ON a.parent_id=b.parent_id
WHERE a.data_key='Guitar' AND a.data_value='4' AND
      b.data_key='Radio' AND b.data_value='2';

【讨论】:

  • 感谢您的回复,但此查询也会返回空行,因为条件 "a.data_key='Guitar' AND a.data_value='4' AND b.data_key='Radio' AND a .data_value='2'" 实际上是在单行上执行的,它总是会返回 false,因为单行不能有 a.data_key = 'Guitar' 和 a.data_key = 'Radio'
  • 我认为您只是输入错误,我将 a.data_value='2' 更改为 b.data_value='2' 并返回正确的结果。谢谢!
  • @Macchiato 是的。这是一个错字。
【解决方案2】:
SELECT DISTINCT Parent_Id
FROM details
WHERE (data_key='Guitar' AND data_value='4') OR
(data_key='Radio' AND data_value='2')

这将得到您要求的结果。

您评论的尝试很接近,但它使用的是“AND”而不是“OR”。

【讨论】:

  • 这是错误的,你使用 OR 将返回 PARENT_ID 1,2 和 3。条件是满足 data_key = 'Guitar' and data_value'4' AND data_key'Radio' and data_value='2 '
  • @Macchiato:但您的第二个标准是“data_key='Radio' 和 data_value='2'”。在您的样本集中,这也与第 10 行匹配。没关系,我知道我的问题出在哪里。您正在寻找满足这两个条件的 parentId,而不是满足任一条件的 parentId。
【解决方案3】:

也许你正在寻找这个

   SELECT  a.parent_id 
  FROM details AS a
  JOIN details AS b ON a.parent_id=b.parent_id
  WHERE a.data_key='Guitar' AND a.data_value='4' AND
     b.data_key='Radio' AND b.data_value='2'
  group by a.parent_id ;

demo here

【讨论】:

    猜你喜欢
    • 2022-09-30
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多