2017-02-26 5 views
0

Ich habe 2 Tabellen, die ich beitreten möchte und alles, was ich von der Joined-Tabelle wissen möchte, ist, ob es eine ausgehende Zeile gibt, die der Join-Bedingung entspricht. Ich möchte nicht alle Zeilen der verbundenen Tabelle zurückgeben.So verbinden Sie 2 MySQL-Tabellen, ohne alle verknüpften Zeilen zurückzugeben

Beispiel:

Table A 
ID Name 
1 Bob 
2 Sally 
3 Joe 

Table B 
Num ID Data 
1 1 anything 
2 1 some more 
3 3 thats it 

Was ich alle Zeilen aus der Tabelle A zurückkehren will, aber alles, was ich zu wissen, egal, ob es eine passende ID auf Tabelle B ist, ich will nicht alle passenden Zeilen zurückgeben .

So würde meine Ausgabe wie folgt aussehen:

ID Name Has Data 
1 Bob Yes 
2 Sally No 
3 Joe Yes 

ich so aussehen nicht die ausgegeben werden soll (was es tut derzeit):

ID Name Has Data 
1 Bob Yes 
1 Bob Yes 
2 Sally No 
3 Joe Yes 

Hier meine Frage ist:

SELECT a.ID, Name 
    FROM table_a AS a 
    LEFT JOIN (SELECT DISTINCT b.ID FROM table_b) AS b ON b.ID = a.ID 

ich bekomme diese Fehlermeldung: Unknown column 'b.ID' in 'field list'

+0

Versuchen Sie es mit 'DISTINCT table_b.ID von table_b' in der Sub-Abfrage – Jhecht

+0

Dank @Jhecht SELECT aber nicht –

Antwort

1
SELECT a.ID, Name 
CASE WHEN b.ID IS NULL THEN 'No' ELSE 'Yes' END as [Has data] 
FROM table_a AS a 
LEFT JOIN table_b ON b.ID = a.ID 
GROUP BY a.Id, Name 

SELECT a.ID, Name 
CASE WHEN EXISTS (SELECT 1 
        FROM table_b b 
        WHERE b.ID = a.Id) THEN 'Yes' 
    ELSE 'No' END as [Has data] 
FROM table_a AS a 

Wenn LEFT JOIN keine Zeilen nicht zurückkehrt, wird b.ID null sein, dann eine CASE-Anweisung verwenden, ja oder nein, je nach ihm Wert zurückzukehren.

+0

funktionierte ich versuchte, es @McNets aber ich bekomme immer noch beide Reihen von Table_B –

+0

Excellent. Die 'GROUP BY' hat es @McNets gemacht. Vielen Dank –

Verwandte Themen