Vinzenz Mai: Datensatz-Verknüpfung...

Beitrag lesen

Hallo,

Ich hoffe, mein Anliegen schneidet noch php,

nein, keine Spur.

Ich versuche zwei Tabellen miteinander zu verknüpfen mit folgendem Ziel:
Es sollen alle Datensätze aus Tabelle1 ausgegeben werden und zusätzlich abgefragt werden, ob die Datensätze auch in Tabelle2 enthalten sind.

nur ob?
Oder benötigst Du doch irgendwelche Informationen aus der zweiten Tabelle?

Wie sieht es mit der Beziehung zwischen den beiden Tabellen aus? Können einem Datensatz aus Tabelle1 mehrere Datensätze aus Tabelle2 zugeordnet sein?

$frage_tabelle = "SELECT * FROM (SELECT tabelle1.idnummer, tabelle1.titel FROM tabelle1) AS t1 JOIN (SELECT tabelle2.idnummer as suchnummer FROM tabelle2) AS t2 ON t1.idnummer=t2.suchnummer ORDER BY titel ASC";

Brauche ich den join überhaupt? Ist der Ansatz richtig?

Der Ansatz sieht viel zu kompliziert aus.

Während das query von tabelle1 durchlaufen wird und die Datensätze ausgegeben werden möchte ich abfragen, ob der gerade ausgegebene Datensatz auch in tabelle2 vorhanden ist.

Du kannst das mit einem Join lösen, Du kannst das mit einem Subquery lösen.

Pseudocode:

Gib mir
    idnummer,
    titel,
    sowie die Information, ob es Entsprechungen in tabelle2 gibt
aus
    tabelle1

a) Lösung mit einem OUTER JOIN

SELECT DISTINCT   -- wir benötigen jeweils nur einen Datensatz  
    t1.idnummer,  
    t1.titel,  
    t2.idnummer AS suchnummer    -- falls Entsprechung vorhanden  
                                 -- ist das der gleiche Wert wie in t1.idnummer  
                                 -- falls nicht, dann der Wert NULL  
FROM  
    tabelle1 t1  
LEFT OUTER JOIN  
    tabelle2 t2  
ON  
    t1.idnummer = t2.idnummer  
ORDER BY  
    t1.titel  

eine Lösung mit Subquery:

SELECT  
    t1.idnummer,  
    t1.titel,  
    (SELECT                            -- gib mir  
        COUNT(t2.idnummer)             -- die Anzahl der Datensätze  
     FROM                              -- aus  
        tabelle2 t2                    -- Tabelle2  
     WHERE t1.idnummer = t2.idnummer   -- die die gleiche idnummer haben  
    ) AS anzahl                        -- und benenne die Spalte mit "anzahl"  
FROM  
    tabelle1 t1  
ORDER BY  
    t1.titel                           -- aufsteigend ist die Standardsortierung  

Es gibt noch weitere Möglichkeiten, das Problem zu lösen. Es hängt auch davon ab, welchen Inhalt Du in der "Prüfspalte" haben willst.

Freundliche Grüße

Vinzenz