• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vorkomme

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
Evtl ganz einfach aber ich komm nicht drauf. Habe Zwei Tabellen - Tabelle1 & Tabelle2. Diese sind vom Aufbau gleich. Tabelle1 ist die Basistabelle, Tabelle2 ist ein Duplikat enthält aber nicht alle Einträge von Tabelle1 sondern nur einen Teil (Quasi kleine Änderungen usw., die Unique IDs sind aber die Selben). Nun bräuchte ich eine Abfrage bzw. Ausgabe von allen Einträge der Tabelle1 deren IDs NICHT in Tabelle2 vorkommen.

Und daran hänge ich gerade fest. Wie kann ich diese gescheit vergleichen? Angenommen ich bräuchte als Ausgabe die Spalte Mail und Name aus Tabelle1 ohne die Einträge aus Tabelle2 - da diese nach einem Login aus Tabelle1 dupliziert und ggf. verändert wurden.

Hintergrund ist das ich allen die noch nicht eingeloggt waren, sprich noch keine Duplikat ihres DB-Eintrages erstellt wurde, eine Erinnerungsmail schicken möchte.

Ideen?

Gruß godlike

Nachtrag: Ich habs!

SELECT tabelle1.mail, tabelle1.name FROM tabelle1 WHERE tabelle1.id NOT IN ( SELECT DISTINCT tabelle2.id FROM tabelle2 )
 
Zuletzt bearbeitet:

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

Das DISTINCT-Keyword benötigst du nicht, da die IDs einmalig sind.
 

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #3
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

Danke für den Hinweis!
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

Mal eine blöde Frage - ist es performanter den Query für jeden Wert über eine gesamte Tabelle zu machen oder die Werte nach Möglichkeit zwischenzuspeichern, um dann auf ein einmal ausgelesenes Array die Abfragen durchzuführen?

Ich kann mir aber schon vorstellen das meine "Frage" sich bei riesigen Datenmengen in Tabelle 2 ad absurdum führen könnte bzw. gar unmöglich ist... ;)

Wobei, mit dem SELECT werden ja dann eh "alle" Werte auch in den Speicher gelesen, es käme dann wohl aufs fast gleiche raus. Wäre nur die Frage wo die Performance besser wäre?!
 

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

Das müsste man testen, in der Regel hat MySQL aber recht gute Cache- und Parallelisierungsmethoden schon einkompiliert. Falls man nichts grob falsches in seinen Abfragen hat (Rekursion, mehrfach verschachtelte JOINs) geht das auch recht schnell. Insbesondere in godlikes Anwendungsfall ist es ja aber egal, ob die Abfrage 10, 100 oder 1000ms dauert.

Ich empfehle übrigens die Verwendung von MariaDB statt Oracle MySQL, das hat dann noch mal ein paar Verbesserungen durch die FOSS-Community erhalten. Ist unter Debian und Ubuntu glaube ich standard.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

@phre4k

Ich vermute auch mal das man häufige Queries Cached - und die Datenmengen vielleicht bei einem SELECT auf X begrenzt und dann mit unsichtbarer "Pagination" arbeitet?
Sonst könnte man vermutlich keine großen Tabellen problemfrei SELECTen/abfragen.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.764
Ort
in der Zukunft
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

Allgemein ist Select * xxxx recht schlecht. Die Querys nehmen schon nur die Datenmenge die du haben möchtest und sortieren, gruppieren, joinen.... diese Weiter.
Das heißt wenn du die Selektierte Datenmenge klein hält geht das schon schneller und braucht weniger Ram.
Welche messbaren Auswirkungen das hat ist eine andere Sache - das hängt schlicht von der Menge ab. Bei über 100.000 Einträgen und 50 Spalten merkt man es aber durchaus auch ohne Zeitmessung.

Das Query-Caching ist übrigens zumindest bei Mysql nicht / oder nicht in allen Distributionen / im Standard aktiv. Das muss man selber konfigurieren und ist auch durchaus Sinnvoll insofern man öfter gleiche Querys erwartet.
 

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

@drfuture: Im vorliegenden Fall wäre mir keine effizientere Methode bekannt, außer die Daten anders anzuordnen (dritte Tabelle oder zusätzliche Spalte in der ersten Tabelle mit ID und Boolean für Angemeldet ja/nein).
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.764
Ort
in der Zukunft
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

ne im vorliegen Fall ist das klar, wobei trotzdem Spalten die evtl. nicht für die Ausgabe benötigt werden - k.a Timestamp's, user der geändert hat.. gibt ja ab und an trotzdem Info in so einer Tabelle die nicht immer Sichtbar sein müssen - reduziert werden könnten.

War auch eher für Split und das *allgemeine* Thema.
 

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

Du könntest auch Joinen, was bei größeren Tabellen durchaus perfomanter ist. Ich weiß, bei dir nicht unbedingt wichtig, aber nur fürs Protokoll :D

SELECT tabelle1.mail, tabelle1.name FROM tabelle1
LEFT JOIN tabelle2
ON tabelle1.id = tabelle2.id
WHERE tabelle2.id IS NULL

Hab ich aus dem Kopf gemacht, keine Garantie für Funktion :T
 

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #11
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

Da ich den Query eh nur ein mal im Jahr in PhpmyAdmin ausführe um da ne csv raus zu holen ist Performance jetzt nicht so wichtig :D Aber trotzdem danke ;)
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

Es geht um den USE-CASE Godlike, ob man solche Queries in seiner Software haben sollte.

Wenn du natürlich Tabelle 2 klein hälst weil nur neue / unbeantwortete Anfragen dort stehen und alles andere gelöscht wird, ist das okay, aber über kurz oder lang sollte man seinen Datenstruktur ändern oder den Query nicht so "mächtig" machen... das war auch meine Frage/Anliegen.

Ich kenne die internas von SQL (mySQL) nicht. Und weiß nicht in wie weit man auf einem kleinen System so einen Query ohne Probleme bzw. mit 100k+ Einträgen in einer Tabelle und die andere mit 500k+, fahren kann. :)
 

tux

NGBler

Registriert
24 Aug. 2013
Beiträge
238
Ort
München
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

Um die nicht enthaltene Menge der Tabelle1 in Tabelle2 zu identifizieren verwende ich immer "minus"

select a from tabelle1
minus
select a from tabelle2

gibt Dir alle Werte der Tabelle 1 zurück, die nicht in Tabelle 2 enthalten sind. Mit der Rückgabe könntest du nun weitere Werte in Tabelle1 suchen und für Deine Auswertungen verwenden.

Allerdings sind hier auch schon gute Varianten genannt worden. Z.B. die werner
 

Shodan

runs on biochips

Registriert
14 Juli 2013
Beiträge
661
Ort
Citadel Station
Re: [SQL] Abfrage 2 Tabellen - Ausgabe nur Werte welche in zweiter Tabelle nicht vork

viewer.php
 
Oben