UNION Abfrage falsch?

Du hast ein Problem mit der Datenbank oder eine SQL Abfrage - hier bist Du richtig
Antworten
Josef
Beiträge: 41
Registriert: Fr 28. Mai 2010, 17:13

UNION Abfrage falsch?

Beitrag von Josef »

hallo,
ich möchte 2 verknüpfte Tabellen abfragen, leider läuft das nicht so.

Code: Alles auswählen

SELECT `products_id` `products_name` `products_meta_title`
FROM products_description
UNION SELECT `products_id`
FROM products
WHERE `products_quantity` >0
entweder ich bekomme nur die IDs wenn ich `products_meta_title` weglasse oder einen Fehler. :roll: :roll:
Doc Olson
Beiträge: 536
Registriert: Mo 10. Mai 2010, 08:54

Re: UNION Abfrage falsch?

Beitrag von Doc Olson »

Mehrere Fehler:

1. UNION SELECT ist nicht das, was Du willst.
2. 'products_quantity' existiert nicht in 'products_description'.
3. fehlen die Kommas in der Auflistung
4. bräuchte UNION die gleiche Anzahl Spalten

Was DU willst, ist das hier:

Code: Alles auswählen

SELECT pd.products_id, pd.products_name, pd.products_meta_title
FROM products_description pd
JOIN products p
ON p.products_id = pd.products_id
WHERE p.products_quantity > 0
Josef
Beiträge: 41
Registriert: Fr 28. Mai 2010, 17:13

Re: UNION Abfrage falsch?

Beitrag von Josef »

hallo Doc,

das ist genau das was ich will.
Vielen Dank für die Hilfe, toll! :)
Wusste nicht, dass UNION nur gleiche Tabellen berücksichtigt. Wieder was dazu gelernt.

Noch eine Frage: wo ist der Unterschied zwischen join und lefter(righter) join?
Danke
yogi
Administrator
Beiträge: 292
Registriert: Do 6. Mai 2010, 14:16
Shop Version: die aktuelle
Wohnort: Köln
Kontaktdaten:

Re: UNION Abfrage falsch?

Beitrag von yogi »

Moin Josef,

zwischen einem "join" muss in der gejointen Tabelle ein passender Eintrag vorhanden sein, bei einem "left [outer] join" hingegen nicht.

Folgendes SQL liefert i.d.R. kein Ergebnis, da es die language_id=100 im Shop (i.d.R.) nicht gibt:

Code: Alles auswählen

select *
from products p
join products_description pd on p.products_id=pd.products_id and pd.language_id=100;
Um nun zumindest die Daten aus der products Tabelle zu erhalten nutzt man den "left join", da dieser es auch erlaubt das in der gejointen Tabelle keine Spalte gefunden wird:

Code: Alles auswählen

select *
from products p
left join products_description pd on p.products_id=pd.products_id and pd.language_id=100;
Wenn Du nun nur die Zeilen sehen möchtest die KEINEN Eintrag in der products_description haben hilft die folgende WHERE Bedingung:

Code: Alles auswählen

where pd.products_id is NULL
da die Spalteninhalte wenn keine passende Datenzeile gefunden wird auf "NULL" gesetzt werden.
Diese Bedingung kann nicht im "on" beim "join" angegeben werden, da es dort keinen NULL-Wert gibt!

Code: Alles auswählen

select *
from products p
left join products_description pd on p.products_id=pd.products_id and pd.language_id=100
where pd.products_id is NULL;
Josef
Beiträge: 41
Registriert: Fr 28. Mai 2010, 17:13

Re: UNION Abfrage falsch?

Beitrag von Josef »

Hallo Yogi,

super erklärt,
jetzt wird mir einiges klar.
Vielen Dank

Josef
Antworten