返回MySQL中没有销售的区域的行
我正在尝试创建一个mySql查询,以返回订单列表,这些订单没有分配给它们的费率。目前我有:返回MySQL中没有销售的区域的行,mysql,sql,Mysql,Sql,我正在尝试创建一个mySql查询,以返回订单列表,这些订单没有分配给它们的费率。目前我有: SELECT * FROM Order RIGHT JOIN Region ON Region.RegionID = Order.RegionID LEFT JOIN RateSet ON RateSet.OrderID = Order.OrderID LEFT JOIN Rate ON Rate.SalesID = RateSet.RateSetID WHERE Rate.RateID IS NU
SELECT * FROM Order
RIGHT JOIN Region ON Region.RegionID = Order.RegionID
LEFT JOIN RateSet ON RateSet.OrderID = Order.OrderID
LEFT JOIN Rate ON Rate.SalesID = RateSet.RateSetID
WHERE Rate.RateID IS NULL
上面的查询似乎实现了这一点,但我想再进一步,只返回区域内所有订单都没有费率的订单
非常感谢任何帮助异常情况-我根本不知道我是否理解为什么在左连接条件中有右连接;这是那种让我的大脑短路的东西 您有4个表:
- Order-列OrderID、RegionID
- 区域-列RegionID
- Rate—列RateID、SalesID、
- RateSet-列RateSetID、OrderID、
SELECT DISTINCT O.*
FROM Order AS O
LEFT JOIN RateSet AS S ON S.OrderID = O.OrderID
LEFT JOIN Rate AS T ON T.SalesID = S.RateSetID
WHERE T.RateID IS NULL
现在,哪些地区有一个或多个订单,但该地区没有一个订单有费率
SELECT G.RegionID
FROM Region AS G
WHERE NOT EXISTS
(SELECT DISTINCT O.RegionID
FROM Order AS O
JOIN RateSet AS S ON O.OrderID = S.OrderID
JOIN Rate AS T ON S.RateSetID = T.SalesID
)
“子选择”列出分配了速率的订单的RegionID值-使用内部联接意味着只选择具有速率的行。不在该列表中的区域是唯一的“订单没有速率的区域”候选区域。因此,我们将该表与前面的查询联接:
SELECT DISTINCT O.*
FROM Order AS O
LEFT JOIN RateSet AS S ON S.OrderID = O.OrderID
LEFT JOIN Rate AS T ON T.SalesID = S.RateSetID
JOIN (SELECT G.RegionID
FROM Region AS G
WHERE NOT EXISTS
(SELECT DISTINCT O.RegionID
FROM Order AS O
JOIN RateSet AS S ON O.OrderID = S.OrderID
JOIN Rate AS T ON S.RateSetID = T.SalesID
)
) AS K ON O.RegionID = K.RegionID
WHERE T.RateID IS NULL
模式结构非常不寻常,对此我不确定——但它看起来是正确的