我有2个表: ORDER_INFO_TABLE 和 APPROVE_TABLE
第一个包含与“订单”相关的信息。请注意,单个订单可能包含不同的“订单行”(这就是为什么您会在图像中看到重复的订单号的原因)下面)。此外,还有一个名为“ PRICE”(在我的图片中未显示此字段)和“已取消”(订单行状态)的字段
第二个表包含与不同订单行的“批准人”相关的信息。在此表的内部,您将看到一个名为“ APPROVERID”,ITEMID(订单行ID)和“ APPROVED”(订单行状态)的字段。批准者必须检查价格是否还可以。如果订单行正常,则批准者将在“ APPROVED”字段中输入数字1。如果价格不正确,他将在另一个表的CANCELED字段中输入数字1。
看看这些图像:
我尝试未成功获取特定批准者的所有已取消订单(取消了所有ITS订单行时取消了订单)和批准的订单(批准的订单可能包含取消的订单行)
我尝试了很多次,使用count运算符,左联接,但是我完全迷失了:(
一个人建议我使用此查询:
SELECT web_order_id
FROM ORDER_INFO_TABLE oif
INNER JOIN APPROVE_TABLE apt
ON (oif.item_id = apt.item_id)
GROUP BY web_order_id
HAVING SUM(cancelled) = COUNT(*);
问题是它无法正常唤醒(它显示此错误消息:操作数数据类型对于sum运算符无效),并且使用此查询,我将无法获得特定订单的CANCELED和APPROVED订单批准者。
编辑:
SELECT web_order_id
FROM ORDER_INFO_TABLE oif
INNER JOIN APPROVE_TABLE apt
ON (oif.item_id = apt.item_id **and apt.APPROVERID = 'RANDOM@MAILNATOR.COM'**)
GROUP BY web_order_id
HAVING SUM(cancelled) = COUNT(*);
答案 0 :(得分:1)
已编辑:如果您只想从特定审批者中选择订单,则只需对联接使用简单选择:
SELECT oif.web_order_id, oif.item_id, apt.approverid,
oif.cancelled, apt.approved
FROM ORDER_INFO_TABLE oif
INNER JOIN APPROVE_TABLE apt
ON oif.item_id = apt.item_id
WHERE apt.approverid = 'RANDOM@MAILNATOR.COM'
ORDER BY oif.web_order_id, oif.item_id;
您的cancelled
列数据类型似乎为VARCHAR
。您应该先将其转换为数字,然后再使用SUM
函数
SELECT oif.web_order_id
FROM ORDER_INFO_TABLE oif
INNER JOIN APPROVE_TABLE apt
ON oif.item_id = apt.item_id
GROUP BY oif.web_order_id
HAVING SUM(CAST(oif.cancelled AS int)) = COUNT(*);