从具有至少一个符合不同要求的行的表值中进行选择

时间:2014-12-22 13:25:32

标签: mysql sql subquery

我有一个这样设计的表:

VALUES table
id INT
id_product_lists INT
id_parameters INT
text_value VARCHAR(50)
number_value FLOAT

我想写一个有两个条件的查询:

SELECT id_product_lists FROM values WHERE 
  (id_parameters = 5 AND text_value = "foo") AND 
  (id_parameters = 10 AND number_value > 20)

我想要找的是一个"产品清单"它匹配具有不同参数和值的两个(或更多)条件。

到目前为止,我的查询并不起作用,但至少有助于说明我想要完成的任务。

为了澄清,我需要找到任何id_product_list个值,这些值的行符合id_paramters = 5 AND text_value = 'foo'并且还有一行符合id_parameters = 10 AND number_value > 20

考虑以下示例数据:

| id_product_list | id_paramaters | text_value | number_value |
+-----------------+---------------+------------+--------------+
|       1         |       5       |    foo     |       1      |
|       1         |       10      |    hey     |       30     |
|       2         |       5       |    foo     |       1      |
|       2         |       10      |    hey     |       10     |
应该包含

id_product_list 1,因为它匹配两个条件,但是id_product_list 2不是这样,所以不应该返回它。

2 个答案:

答案 0 :(得分:2)

您正在尝试搜索id_parameters 5以及10,因此找不到任何结果。

尝试自我加入,例如:

SELECT t1.id_product_list
FROM mytable t1 INNER JOIN mytable t2
ON   t1.id_product_list = t2.id_product_list
WHERE t1.id_parameter = 5 AND t1.text_value = 'foo'
AND   t2.id_parameter = 10 AND t2.number_value > 20

答案 1 :(得分:1)

您可以使用子查询。您可以编写查询以提取满足id_parameters = 5 AND text_value = 'foo'要求的行,如下所示:

SELECT DISTINCT id_product_lists
FROM values
WHERE id_parameters = 5 AND text_value = 'foo';

然后,您可以使用IN运算符仅提取符合id_parameters = 10 AND number_value > 20要求的id_product_lists,如下所示:

SELECT DISTINCT id_product_lists
FROM values
WHERE (id_parameters = 5 AND text_value = 'foo') AND id_product_lists IN(
   SELECT DISTINCT id_product_lists
   FROM values
   WHERE (id_parameters = 10 AND number_value > 20));