在WHERE子句中使用!=时使用SELECT不起作用(使用GROUP BY和HAVING COUNT)

时间:2015-02-09 10:35:29

标签: mysql sql

此问题基于:Select row from left join table where multiple conditions are true

我现在正在尝试从表1中选择行,这些行在表2中没有连接到某个属性ID。

这些是表格:

表1

| ID  |   Name    |
|  1  |   test    |
|  2  |   hello   |

表2

| ID  | PropertyID |
|  1  |     3      |
|  1  |     6      |
|  1  |     7      |
|  2  |     6      |
|  2  |     1      |

我正在使用以下查询(使用' ='):

SELECT tab1ID
FROM table2
WHERE propertyID != 3 OR propertyID = 6
GROUP BY tab1ID
HAVING COUNT(*) = 2;

此查询应返回ID = 2,但返回零行。我做错了什么?

非常感谢任何帮助!

编辑:我已经给了一个MWE,但这是我的实际查询:

SELECT transactionline.total FROM transactionline
LEFT JOIN product_variant ON product_variant.SKU = transactionline.SKU 
LEFT JOIN product ON product_variant.productID = product.productID 
LEFT JOIN connect_option_product ON connect_option_product.productID = product.productID 
LEFT JOIN productattribute_option ON productattribute_option.optionID = connect_option_product.optionID 
WHERE productattribute_option.optionID = 4 OR productattribute_option.optionID = 9
GROUP BY transactionline.lineID
HAVING COUNT(*) = 1 
AND SUM(productattribute_option.optionID = 4) = 0
AND SUM(productattribute_option.optionID = 9) > 0

产品可以与optionID有多个连接。此查询的目标是选择某些过滤器为true或false的总量。

1 个答案:

答案 0 :(得分:4)

您的分组是正确的。但是,您需要计算所需的值在您的组中的次数。该计数必须为零。

SELECT tab1ID
FROM table2
GROUP BY tab1ID
HAVING sum(propertyID = 6) > 0
AND sum(propertyID = 3) = 0