Seite 1 von 1

SQL Über zwei Tabellen, wobei die eine nicht gefüllt ist

Verfasst: 21.05.2008, 01:20
von pvdb
Hi,

sagen wir ich habe die Tabelle warhouse:

warhouse_id
warhouse_name

und die Tabelle product_to_warhouse:

product_id
quantity
warhouse_id


In meinem Script will ich nun alle Lagerplätze anzeigen:

select * from warhouse

Nun Frage ich mich, ob ich in einem SQL auch mit anzeigen kann, ob der Lagerplatz belegt ist

select * from warhouse w, product_to_warhouse p2w where w.warhouse_id = p2w.warhouse_id

würde ja nicht gehen, weil er dann nur Lagerplätze anzeigen würde, die gefüllt sind, aber nicht die Leeren.

Ist das irgendwie mit einem Join möglich abzufragen? Wenn ja interessiere ich mich für ein Beispiel ;)

Phil

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 21.05.2008, 01:28
von Zerstreuter
SELECT * FROM warhouse AS w
LEFT JOIN product_to_warhouse AS p2w USING (warhouse_id)

Verfasst: 21.05.2008, 01:30
von gelegenheitsbot
join ist nur ne hierarische verknüpfungs-optimierungs-funktion (hinsichtlich Indizees).......

Mit SQL ist prinzipiell inzwischen alles möglich!

Leider zeigst du hier keine logischen zusammenhänge, so dass dir hier auch keiner ne Lösung geben kann. Schick mir mal ne pm - ich kann dir da auf jeden Fall helfen! Aber deine Logik-Verknüpfungen, Standardwerte und Struktur sind hier nicht eindeutig erkennbar.

Verfasst: 21.05.2008, 11:01
von Southmedia
gelegenheitsbot, ist doch alles vorhanden was man braucht:
1. Wir haben ne Tabelle in der die Lagerplätze stehen,
2. eine Beziehungstabelle die angibt in welchem Lagerplatz wieviele Einheiten von einem Produkt lagern,
3. und (nicht angegeben, aber offensichtlich) eine Tabelle mit Produkten.

Also gehen wir, wie Zerstreuter korrekt gesagt hat, hin und holen uns alle Lagerplätze, joinen das ganze mit der Beziehungstabelle um zu sehen wo Produkte liegen und wo nicht. Bei Lagerplätzen (warehouse_id) die nicht belegt sind ist product_id dann NULL, wonach ja auch gefiltert werden kann (WHERE product_id IS NULL, wenn nur leere Lagerplätze angezeigt werden sollen oder WHERE product_id IS NOT NULL, wenn nur belegte Lagerplätze angezeigt werden sollen) .

Zusätzlich würde ich, wenn die Information _welche_ Produkte jeweils eingelagert sind nicht so wichtig ist, noch nach der warehouse_id gruppieren, damit Lagerplätze in denen 1000 Produkte lagern (Davon gehe ich mal aus dass das möglich ist, sonst wäre das DB-Schema leicht 'falsch'...) nicht 1000-fach angezeigt werden, sondern nur einmal auftauchen. Dadurch verliert product_id natürlich einen Teil seiner Aussagekraft, aber das wird ja in Kauf genommen da nicht notwendige Information.

- Jan

Verfasst: 22.05.2008, 11:44
von pvdb
So,

vielen Dank für die Antworten, ein LEFT JOIN, war genau das was ich gesucht habe. Damit funktioniert es nun auch.