SELECT t1.REPRESENT_SKU_CODE --
,t1.DELIVERY_TYPE_NO --
,t1.SHIPPING_LOCATION --
,MAX(t3.SHIPPING_WAREHOUSE_CODE) --
FROM COMMODITY_HEADER t1
INNER JOIN STOCK t2
ON t2.SKU_CODE = t1.REPRESENT_SKU_CODE
INNER JOIN ALLOCATION_ORDER_MANAGEMENT t3
ON t3.WAREHOUSE_CODE = t2.WAREHOUSE_CODE
WHERE t1.SINGLE_DELIVERY_FLG = '0'
GROUP BY t1.REPRESENT_SKU_CODE, t1.DELIVERY_TYPE_NO, t1.SHIPPING_LOCATION
HAVING COUNT(*) > 1;
数据是这样子的,想把REPRESENT_SKU_CODE DELIVERY_TYPE_NO SHIPPING_LOCATION一样,SHIPPING_WAREHOUSE_CODE不一样的数据抽出来,如果是REPRESENT_SKU_CODE DELIVERY_TYPE_NO SHIPPING_LOCATION,SHIPPING_WAREHOUSE_CODE 四个字段都一样的话,就不抽出来。为什么不好用呢。
为啥不直接用这四个字段一起分组呢?
【以下回答由 GPT 生成】
根据问题描述,你想要从数据库中抽取出REPRESENT_SKU_CODE、DELIVERY_TYPE_NO和SHIPPING_LOCATION相同,但SHIPPING_WAREHOUSE_CODE不同的数据,同时排除同时具有相同REPRESENT_SKU_CODE、DELIVERY_TYPE_NO、SHIPPING_LOCATION和SHIPPING_WAREHOUSE_CODE的数据。
目前的查询语句使用了GROUP BY和HAVING语句,但无法达到你想要的效果。可能的原因是HAVING COUNT(*) > 1的条件过于宽松,导致无法正确排除具有相同REPRESENT_SKU_CODE、DELIVERY_TYPE_NO、SHIPPING_LOCATION和SHIPPING_WAREHOUSE_CODE的数据。
为了解决这个问题,可以使用子查询和EXISTS子句来进行优化。以下是优化后的查询语句:
SELECT t1.REPRESENT_SKU_CODE, t1.DELIVERY_TYPE_NO, t1.SHIPPING_LOCATION, t3.SHIPPING_WAREHOUSE_CODE
FROM COMMODITY_HEADER t1
INNER JOIN STOCK t2 ON t2.SKU_CODE = t1.REPRESENT_SKU_CODE
INNER JOIN ALLOCATION_ORDER_MANAGEMENT t3 ON t3.WAREHOUSE_CODE = t2.WAREHOUSE_CODE
WHERE t1.SINGLE_DELIVERY_FLG = '0'
AND EXISTS (
SELECT 1
FROM COMMODITY_HEADER t4
INNER JOIN STOCK t5 ON t5.SKU_CODE = t4.REPRESENT_SKU_CODE
INNER JOIN ALLOCATION_ORDER_MANAGEMENT t6 ON t6.WAREHOUSE_CODE = t5.WAREHOUSE_CODE
WHERE t1.REPRESENT_SKU_CODE = t4.REPRESENT_SKU_CODE
AND t1.DELIVERY_TYPE_NO = t4.DELIVERY_TYPE_NO
AND t1.SHIPPING_LOCATION = t4.SHIPPING_LOCATION
AND t3.SHIPPING_WAREHOUSE_CODE != t6.SHIPPING_WAREHOUSE_CODE
)
GROUP BY t1.REPRESENT_SKU_CODE, t1.DELIVERY_TYPE_NO, t1.SHIPPING_LOCATION, t3.SHIPPING_WAREHOUSE_CODE;
这个优化方案中,我们使用了一个子查询来判断是否存在具有相同REPRESENT_SKU_CODE、DELIVERY_TYPE_NO和SHIPPING_LOCATION,但SHIPPING_WAREHOUSE_CODE不同的数据。如果存在这样的数据,则将其包括在最终的查询结果中。
这种优化方案可以解决你的问题,同时还可以提高查询的性能。