サブクエリ/ユニオンに問題があります。
ここに私が欲しいものがあります:私はdc_all_ordersと呼ぶ注文用の「バックアップテーブル」(バックアップだけでなく、いくつかの目的に使用されます)を持っています。他に wb_orders と wb_printed という 2 つのテーブルがあります。注文は最初に wb_orders に入り、次にワークフロー ステップの後、wb_printed に入ります。一部の orderitem が欠落していることがわかりました。これはバックアップ テーブルにありますが、2 つのメインの order テーブルにはありません。影響を受ける orderItems を数えたかったのです。カウントが 0 より大きくなければならないことは 100% わかっていますが、ゼロを返し続けます。カウントするアイテムの例:
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」