Ich habe drei Tabellen:finden Kombinationen aus zwei Tabellen, die in dritter Tabelle nicht existieren
Tabelle A (> 1.000.000 Zeilen)
+----+-----------+
| id | field_A_1 |
+----+-----------+
| 1 | testa1 |
| 2 | testa2 |
| 3 | testa3 |
+----+-----------+
Tabelle B (~ 100 Zeilen)
+----+-----------+
| id | field_B_1 |
+----+-----------+
| 1 | testb1 |
| 2 | testb2 |
| 3 | testb3 |
+----+-----------+
Tabelle C (> 10.000.000 Zeilen)
+----+---------------+---------------+
| id | field_A_1 | fk_id_table_B |
+----+---------------+---------------+
| 1 | testa1 | 1 |
| 2 | testa2 | 2 |
| 3 | testa3 | 3 |
+----+---------------+---------------+
Ich möchte alle Kombinationen von A und B finden, die nicht in Tabelle C sind. Leider Tabelle A Feld_A_1/Tabelle C Feld_A_1 sind Varchar.
Ergebnis würde für dieses Beispiel sein:
+-----------+---------------+
| field_A_1 | fk_id_table_B |
+-----------+---------------+
| testa1 | 2 |
| testa1 | 3 |
| testa2 | 1 |
| testa2 | 3 |
| testa3 | 1 |
| testa3 | 2 |
+-----------+---------------+
Ergebnisse von Antworten:
EXPLAIN
SELECT count(a.field_A_1),
b.id AS fk_id_table_B
FROM a,
CROSS JOIN b
WHERE NOT EXISTS
(SELECT 1
FROM c
WHERE c.field_A_1=a.field_A_1
AND fk_id_table_B=b.id)
GROUP BY fk_id_table_B
+----+--------------------+-------+-------+----------------------------+----------------------------+---------+------------------+------------+----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+----------------------------+----------------------------+---------+------------------+------------+----------------------------------------------------+
| 1 | PRIMARY | b | index | PRIMARY,b.id_foreign | b.id_foreign | 4 | NULL | ~100 | Using index; Using temporary; Using filesort |
| 1 | PRIMARY | a | ALL | NULL | NULL | NULL | NULL | >1.000.000 | Using where; Using join buffer (Block Nested Loop) |
| 2 | DEPENDENT SUBQUERY | c | ref | IDX_TABLE_C_B_ID_FIELD_A_1 | IDX_TABLE_C_B_ID_FIELD_A_1 | 36 | b.id,a.field_A_1 | 4 | Using index |
+----+--------------------+-------+-------+----------------------------+----------------------------+---------+------------------+------------+----------------------------------------------------+
Laufzeit unbekannt ich die Abfrage nach einer Minute getötet, das Senden von Daten zu lange gedauert hat.
Laufzeit unbekannt Ich habe die Abfrage nach einer Minute abgebrochen, das Senden von Daten dauerte zu lange.
Was ist die erwartete Ergebnismenge von fo r die in der Frage geposteten Daten? –
fügen Sie bitte die Abfrage an, die Sie bisher versucht haben .. – Laxmi