该问题基于:从满足多个条件的左侧联接表中选择行
我现在尝试从表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的连接。该查询的目标是选择某些过滤器为真或假的总金额。
您的分组是正确的。但是您需要计算您不希望的值出现在您的组中的次数。该计数必须为零。
SELECT tab1ID
FROM table2
GROUP BY tab1ID
HAVING sum(propertyID = 6) > 0
AND sum(propertyID = 3) = 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句