我遇到了子查詢/聯合問題。MySQL子查詢返回假數據
這是我想要的:我有一個「備份表」(它用於某些目的,而不僅僅是備份)的訂單,我稱之爲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的版本: 「服務器版本:65年5月1日,由曼月樂曼月樂®社區項目分佈」 上一個CentOS 5.8
什麼是數據類型涉及哪些重複?看起來你可能會面臨整數溢出...... –
productId字段是varchars。 –
如果你只包含兩個表中的一個,該怎麼辦?它的工作原理是什麼?[select count(productId)from dc_all_orders WHERE productId NOT IN(select productId from wb_orders)](我知道這不是一個解決方案,只是爲了檢查會發生什麼) – richardtz