[MySQL] Was stimmt in meiner Abfrage nicht?

Shen84

Grünschnabel
Hi,
ich möchte aus zwei Tabellen Daten auslesen und dann über UNION zu einer Ausgabe vereinen.

Das eigentliche Gesamtziel ist zu ermöglichen, dass von angemeldeten User und Gästen Kommentare verfasst und angezeigt werden können, wobei von den angemeldeten Usern die Namen (name) mit Hilfe der ID (user_id) aus der Tabelle a (ws_users) ausgelesen werden und die Namen der Gäste (name_anonym) aus der Tabelle b (ws_kommentare) und zwar in getrennten Feldern.

Der erste Teil der Abfrage liefert das gewünschte Ergebnis:
Code:
SELECT a.name AS reg_eintragsname, b.name_anonym AS unreg_eintragsname, b.kommentar, b.eintragsdatum FROM ws_users a, ws_kommentare b WHERE a.id = b.user_id AND b.name_anonym IS NULL

Es werden nur die Daten ausgegeben, bei denen die Spalte "id" aus Tabelle a den selben Wert hat, wie die Spalte "user_id" aus Tabelle b und wo zusätzlich die Spalte "name_anonym" den Wert NULL hat.

Beim zweiten Teil werden jedoch sämtliche Daten aus a.name ausgegeben und die Einschränkungen werden anscheinend ignoriert:
Code:
SELECT a.name AS reg_eintragsname, b.name_anonym AS unreg_eintragsname, b.kommentar, b.eintragsdatum FROM ws_users a, ws_kommentare b WHERE b.name_anonym IS NOT NULL AND b.user_id IS NULL

Eigentlich soll hier das Ziel sein, alle Spalten auszuwählen, in denen "name_anonym" aus Tabelle b nicht den Wert NULL hat und "user_id" aus Tabelle a den Wert NULL hat.

Wo könnte hier der Fehler sein?

Die zweite Abfrage funktioniert wie folgt, aber dann klappt UNION nicht, weil a.name nicht einbezogen wird:
Code:
SELECT b.name_anonym AS unreg_eintragsname, b.kommentar, b.eintragsdatum FROM ws_kommentare b WHERE b.name_anonym IS NOT NULL AND b.user_id IS NULL AND b.song_id = '920'
 
Zuletzt bearbeitet:
Hi,

Die zweite Abfrage funktioniert wie folgt, aber dann klappt UNION nicht, weil a.name nicht einbezogen wird:
Code:
SELECT b.name_anonym AS unreg_eintragsname, b.kommentar, b.eintragsdatum FROM ws_kommentare b WHERE b.name_anonym IS NOT NULL AND b.user_id IS NULL AND b.song_id = '920'

Dann bezieh ihn doch mit ein:

Code:
SELECT "" AS reg_eintragsname, 
   b.name_anonym AS unreg_eintragsname
   ...

LG
 
Vielen Dank kuddeldaddeldu,
so funktioniert es. Dass man auch leere Platzhalter einsetzen kann wusste ich nicht :)
 
Zurück