table1 (id, name)
table2 (id, name)
Abfrage:
SELECT name
FROM table2
-- die noch nicht in table1 vorhanden sind
table1 (id, name)
table2 (id, name)
Abfrage:
SELECT name
FROM table2
-- die noch nicht in table1 vorhanden sind
Vielen Dank, das funktioniert auch gut mit einer großen Menge an Daten! Aber ich frage mich nur über den Begriff "Außer" nach.
767ms für mich bei 5k Datensätzen von insgesamt 200k Datensätzen. Alles andere hat Minuten gedauert.
Alle oben genannten Abfragen sind auf großen Tabellen unglaublich langsam. Ein Strategiewechsel ist erforderlich. Hier ist der Code, den ich für eine meiner Datenbanken verwendet habe. Sie können ihn transliterieren, indem Sie die Felder und Tabellennamen ändern.
Das ist die Strategie: Sie erstellen zwei implizite temporäre Tabellen und machen eine Union derselben.
Sieht nicht elegant aus, aber es ist um Größenordnungen schneller als alle oben genannten Lösungen.
WICHTIGE ANMERKUNG: Aktivieren Sie den INDEX für die zu überprüfenden Spalten.
SELECT name, source, id
FROM
(
SELECT name, "active_ingredients" as source, active_ingredients.id as id
FROM active_ingredients
UNION ALL
SELECT active_ingredients.name as name, "UNII_database" as source, temp_active_ingredients_aliases.id as id
FROM active_ingredients
INNER JOIN temp_active_ingredients_aliases ON temp_active_ingredients_aliases.alias_name = active_ingredients.name
) tbl
GROUP BY name
HAVING count(*) = 1
ORDER BY name
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Schauen Sie sich die Lösung mit UNION unten an, die um ein Vielfaches schneller ist als jede andere hier aufgeführte Lösung.