我有两个tables
,分别是itemOrders和itemDelivered。
itemOrders
+-------+---------+--------+
| id | orderid | itemid |
+-------+---------+--------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 2 |
| 5 | 3 | 1 |
| 6 | 3 | 2 |
+-------+---------+--------+
还有
物品已交付
+-------+-------------+--------+
| id | orderId | itemid |
+-------+-------------+--------+
| 1 | 2 | 2 |
| 2 | 3 | 2 |
| 3 | 2 | 1 |
+-------+-------------+--------+
在上述情况下,我希望所有distinct
itemDelivered中的max
orderId小于table
itemOrders中的max
orderId的所有table
项目。
在上面的示例中,我应获得itemid 1作为结果,因为max
itemDelivered中table
的orderid为2,小于{{1}中max
的orderid } itemOrders为3。
我写了下面的table
,但是它给了我两个项目1和2,因为项目2在itemDelivered query
中没有orderId 1。
table
答案 0 :(得分:1)
好,设法编写一个查询,以提供所需的输出。
SELECT io.itemid
FROM itemorders as io
LEFT JOIN itemdelivered AS id ON io.orderid = id.orderid AND io.itemid = id.itemid
WHERE id.itemid IS NULL
HAVING MAX(id.orderid) IS NULL
ORDER BY io.id
答案 1 :(得分:1)
您可以使用LEFT JOIN
和itemid
上的GROUP BY
在两个表之间itemid
。
最终使用HAVING
子句仅考虑那些itemid
值,其中MAX(itemdelivered.orderid) < MAX(itemorders.orderid)
SELECT io.itemid
FROM itemorders AS io
LEFT JOIN itemdelivered AS id
ON id.itemid = io.itemid
GROUP BY io.itemid
HAVING MAX(id.orderid) < MAX(io.orderid)
OR MAX(id.orderid) IS NULL
结果
| itemid |
| ------ |
| 1 |