| 

.NET C# Java Javascript Exception

0
Hallo,

ich habe folgedendes Problem:
Ich muss einen SQL-Befehl erstellen, welcher über 3 Tabellen geht. Ich versuche mal die Logik des Befehls zu erklären:

1. Tabelle
warengruppen
-------------------------
warengruppen_id | name | ...


2. Tabelle
Artikel
-------------------------
artikel_id | warengruppen_id | ...

3. Tabelle
Lagerbestand
-------------------------
artikel_id | bestand


Die Warengruppen werden nacheinander über die Tabelle Warengruppen ausgelesen. Jetzt sollen aber nur die Warengruppen ausgelesen werden, welche Artikel haben und dessen Artikel auf einen Bestand > 0 haben.

Ich habe mich versucht in JOINS und Unterabfragen einzulesen, aber irgendwie klappt das nicht was ich da baue...

SELECT wg.*
FROM warengruppen wg
JOIN artikel art
ON wg.warengruppen_id = art.warengruppen_id
WHERE art.ART_ID IN ( SELECT lager.bestand
FROM lagerbestand lager
WHERE lager.bestand > 0
)
AND wg.name = ".$obj->name."


Ich weiß nicht wo der Fehler ist.
Achja ich nutzte ich noch eine MySQL4-Datenbank. Ist die unter Umständen zu alt für JOINS oder Unterabfragen?

Gruß
kwio

EDIT:
Hier ist noch der Fehler der geworfen wird:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT lager . art_id FROM lagerbestand lager WHERE lage
18.10.2012
kwio 1 4
3 Antworten
0
Hallo,
so auf die schnelle würd ich sagen, dass dein Problem an der Unterabfrage liegt.
WHERE art.ART_ID IN ( SELECT lager.bestand
FROM lagerbestand lager
WHERE lager.bestand > 0
)


art.ART_ID kann nie in lager.bestand vorkommen.

Probier mal was wie

WHERE art.ART_ID IN ( SELECT lager.ART_ID
FROM lagerbestand lager
WHERE lager.bestand > 0
)
18.10.2012
mrmee 745 1 8
Danke, aber das hat leider auch nicht geholfen.
kwio 18.10.2012
0
probier mal:

//...
where exists(
select *
FROM lagerbestand lager
WHERE lager.bestand > 0
and art.ART_ID = lager.ART_ID
)
//...

In sofern ART_ID in beiden Tabellen für Artikel_ID steht.

MySQL 3.23, 4.0, 4.1 Reference Manual :: 12.2.8.6. Subqueries with EXISTS or NOT EXISTS

----------------------------------------------------------------------

Alternativ könnte auch folgendes dich zum Ziel führen:

SELECT wg.*
FROM warengruppen wg
JOIN artikel art ON wg.warengruppen_id = art.warengruppen_id
LEFT JOIN lagerbestand lager ON art.ART_ID = lager.ART_ID
WHERE wg.name = ".$obj->name."
and isnull(lager.bestand, 0) > 0
18.10.2012
Floyd 14,6k 3 9
Floyd 14,6k 3 9
0
Probier mal
SELECT lb.bestand, ar.artikel_id, wg.warengruppen_id, wg.Name
FROM (artikel AS ar INNER JOIN warengruppen AS wg ON ar.warengruppen_id = wg.warengruppen_id)
INNER JOIN Lagerbestand AS lb ON ar.artikel_id = lb.artikel_id
WHERE (((lb.bestand)>0))
18.10.2012
JEwen 2,7k 5

Stelle deine Mysql-Frage jetzt!