获取交付后订购的项目

5cnsuln7  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(307)

我有两个 tables ,即itemorders和itemdelivered。
项目订单

+-------+---------+--------+
| 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      |
+-------+-------------+--------+

从上面的场景中,我想要所有这些 distinctmax 中的orderid table itemdelivered小于 max 中的orderid table 项目订单。
在上面的例子中,我应该得到itemid1作为结果,因为 max 订单ID为2英寸 table itemdelivered,这比它的 max 中的医嘱ID table itemorders是3。
我写了以下内容 query 但它同时给出了项目1和项目2,因为项目2在itemdelivered中没有orderid 1 table .

SELECT DISTINCT( itemid )
FROM   itemorders
WHERE  orderid NOT IN (SELECT orderid
                       FROM   itemdelivered)
dgiusagp

dgiusagp1#

你可以 LEFT JOIN 在两张table之间使用 itemid ,和 GROUP BYitemid .
最终使用 HAVING 只考虑那些 itemid 值,其中 MAX(itemdelivered.orderid) < MAX(itemorders.orderid) db fiddle视图

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      |
kxxlusnw

kxxlusnw2#

好的,设法编写一个查询来提供所需的输出。

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

相关问题