此问题基于: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的总量。
答案 0 :(得分:4)
您的分组是正确的。但是,您需要计算不所需的值在您的组中的次数。该计数必须为零。
SELECT tab1ID
FROM table2
GROUP BY tab1ID
HAVING sum(propertyID = 6) > 0
AND sum(propertyID = 3) = 0