SQL Server : join eine Zeile zurückgeben von einem zu vielen-Beziehung mit zwei verknüpften Tabellen
- Tabelle
TRANS
enthält Transaktions-Informationen (transaction_id, date, foo, bar
) - Tabelle
ELEM
enthält Elemente der Transaktion (transaction_id, detail_id
) - Tabelle
DET
enthält die Elemente (detail_id, size, weight, category
)
Abfrage:
select * from TRANS t
join ELEM e on (t.transaction_id = e.transaction_id)
join DET d on (e.detail_id = d.detail_id)
Jedoch TRANS
kann einer von mehr ELEM/DET
Zeilen zugeordnet. Also wenn ich 100 Zeilen in TRANS
und führen Sie die Abfrage, werde ich wieder > 100 Zeilen, die nicht erwünscht ist.
Ich möchte jedoch wissen, wie viele Transaktionen haben DET
Zeilen mit d.category=1
, aber wenn ich beitreten mit der Bedingung, bekomme ich < 100 Zeilen (nur die Zeilen, die mit dieser Bedingung.
Ich möchte den Kuchen und Essen es auch. Ich möchte zum abrufen aller TRANS
Zeilen in einem Datumsbereich, und auch habe ich das Ergebnis die Anzahl der Zeilen, in denen d.category=1
. Wenn d.category != 1
dann ist mir egal, was drin ist, solange die TRANS
Zeile ausgegeben.
- Möchten Sie die Spalten aus
ELEM
undDET
im Ergebnis zu?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vermeiden, Verkettung LINKS Verbindet. Sie können am Ende mit unerwarteten Daten.
HINWEIS: Durch diese, ich meine, wenn Sie haben:
b und c ist die strikte 1:1 betrachten Sie das schreiben so:
So, Sie würde am Ende mit etwas wie:
^1 - Sie können nicht wählen Sie mehrere Spalten mit demselben Namen in einer Unterabfrage. Ausdrücklich, IMMER!!!
Sind Sie auf der Suche nach so etwas?
Die case-Anweisung wird nur zählen der Zeilen (1 für jede Zeile in der full join-Ergebnisse), wenn d....Kategorie 1.
OK, ich habe die Tabelle Erläuterungen oben in deinem post. Sie Mai wollen
oder
dort auch; ich bin mir nicht ganz sicher, welchen Sie für Fragen
Es ist nicht ganz klar, aber ich denke, Sie wollen join zunächst die
ELEM
undDET
Tabellen (mit dercategory=1
Beschränkung) und dannLEFT JOIN
dieTRANS
Tabelle auf der vorherigen Konstruktion (die Klammern sind nicht erforderlich, Sie sind für die Klarheit der Rangfolge):