Hier ist ein Auszug aus meinem Datenmodell (einschließlich eines Extrakts von Tabellen Inhalt).PostgreSQL: mehrere LINKE JOIN mit mehreren Bedingungen
Ich brauche die Anzahl der Operationen des Typs 1 über Jahr 2015. Ich mag auch die komplette Liste der Städte in meinem Ergebnis Compulse, nicht nur in der operation
Tabelle verwiesen Städte (mit einer Anzahl gleich Null für Städte ohne registrierte Operationen). Ich muss dann mehrere Bedingungen angeben, aber die WHERE
Klausel dreht meine LEFT JOIN
in eine INNER JOIN
(siehe this post), also muss ich die Bedingungen innerhalb der ON
Klauseln angeben.
SELECT
town.town_code,
count(operation.*) AS nb
FROM town
LEFT JOIN operation ON town.town_code = operation.ope_town AND operation.ope_year = 2015
LEFT JOIN intervention ON operation.ope_id = intervention.int_ope_id
LEFT JOIN nature ON intervention.int_id = nature.int_id AND nature.type_id = 1
GROUP BY town.town_code ORDER BY town.town_code ;
ich folgendes Ergebnis:
town_code | nb
------------+-----
86000 | 1
86001 | 0
86002 | 1
86003 | 1
86004 | 0
86005 | 0
Es gibt ein Problem mit der Stadt Code 86003, die 0. Diese Stadt Code bezieht sich auf eine Operation haben sollte (#5
), die zu einer Intervention bezieht (#16
) was sich auf eine nature type = 3
bezieht. Also eine der Bedingungen ist nicht erfüllt ...
Wie kann ich mit mehreren Bedingungen innerhalb ON
Klauseln umgehen?
EDIT: Hier ist das Skript die Tabellen und Test zu erstellen.
CREATE TABLE town (town_code INTEGER, town_name CHARACTER VARING(255)) ;
CREATE TABLE operation (ope_id INTEGER, ope_year INTEGER, ope_town INTEGER) ;
CREATE TABLE intervention (int_id INTEGER, int_ope_id INTEGER) ;
CREATE TABLE nature (int_id INTEGER, type_id INTEGER) ;
INSERT INTO town VALUES (86000, 'Lille'), (86001, 'Paris'), (86002, 'Nantes'), (86003, 'Rennes'), (86004, 'Marseille'), (86005, 'Londres') ;
INSERT INTO operation VALUES (1, 2014, 86000), (2, 2015, 86000), (3, 2012, 86001), (4, 2015, 86002), (5, 2015, 86003) ;
INSERT INTO intervention VALUES (12, 1), (13, 2), (14, 3), (15, 4), (16, 5) ;
INSERT INTO nature VALUES (12, 1), (13, 1), (14, 3), (15, 1), (16, 3) ;
wenn Sie Ihre tbables als Bild posten Sie machen es sehr schwer für jedermann zu beantworten. Wie soll jemand die Abfrage ausprobieren? – e4c5
Habe gerade meinen Beitrag bearbeitet und das Skript hinzugefügt, um die Tabellen zu erstellen und zu testen, sorry. – wiltomap