我有一个这样设计的表:
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不是这样,所以不应该返回它。
答案 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));