我遇到了子查询/联合的问题。
这就是我想要的:我有一个订单的“备份表”(它用于某些目的,而不仅仅是备份),我称之为 dc_all_orders。我还有另外两个表,wb_orders 和 wb_printed。订单首先进入 wb_orders,然后在工作流步骤之后进入 wb_printed。我们已经看到一些订单项丢失了,我们在备份表中有这些,但在两个主订单表中没有。我想计算受影响的 orderItems。我知道 100% 计数应该大于 0,但它一直返回零。应计入的项目示例:
mysql> select orderId,productId from dc_all_orders where productId = '22040247153891';
+---------------------+----------------+
| orderId | productId |
+---------------------+----------------+
| 20319833369460309A | 22040247153891 |
+---------------------+----------------+
1 row in set (2.06 sec)
mysql> select * from wb_orders where productId = '22040247153891';
Empty set (0.00 sec)
mysql> select * from wb_printed where productId = '22040247153891';
Empty set (0.00 sec)
所以这个productId应该出现。现在:
mysql> select count(*) from (select productId from wb_orders UNION select productId from wb_printed) as x;
+----------+
| count(*) |
+----------+
| 4295961 |
+----------+
1 row in set (2 min 51.80 sec)
所以你知道我们有多少数据。
mysql> select count(*) from dc_all_orders WHERE productId NOT IN
-> (select productId from wb_orders UNION select productId from wb_printed);
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (11 min 9.20 sec)
我无法解释。我用不同的方式尝试过,但每种方式都显示为 0。我能想到的只是子查询的大小,但我检查了日志,没有错误,如您所见,返回结果没有错误。
我缺少明显的东西吗?:)
这是另一种方式:
mysql> select count(productId) from dc_all_orders WHERE productId NOT IN (select productId from wb_orders) AND productId NOT IN (select productId from wb_printed);
+------------------+
| count(productId) |
+------------------+
| 0 |
+------------------+
1 row in set (6 min 3.07 sec)
编辑:MySQL 版本:CentOS 5.8 上的“服务器版本:由 IUS 社区项目分发的 5.1.65-ius”