2016-04-09 8 views
1

Ich habe 4 Tabellen:Join-Tabelle, ob Not Null und Null

Tabelle 1: Wilayah

wilayah_id     wilayah_name 
    1       wilayah_1 
    2       wilayah_2 

Tabelle 2: Fläche

area_id    wilayah_id   area_name 
    1      1     area_1 
    2      1     area_2 
    3      2     area_3 
    4      1     area_4 

Tabelle 3: Rayon

rayon_id   wilayah_id   area_id   rayon_name 
    1     1     1    rayon_1 
    2     2     3    rayon_2 

Tabelle 4: Penyulang

penyulang_id  wilayah_id  area_id  rayon_id  penyulang_name 
    1     1    1    null   penyulang_1 
    2     1    null   1   penyulang_2 
    3     2    3    null   penyulang_3 

Wie diese vier Tabellen mit einzelnen Abfrage verbinden, so dass das Ergebnis wie diese aussehen?

Ergebnis, das ich erwarte.

penyulang_id wilayah_name  area_name  rayon_name  penyulang_name 
     1   wilayah_1  area_1   null   penyulang_1 
     2   wilayah_1   null   rayon_1  penyulang_2 
     3   wilayah_2  area_3   null   penyulang_3 

Ich versuchte dies: Diese einfach zentriert die Abfrage auf der Penyulang Tabelle

SELECT 
    penyulang_id, 
    wilayah_name, 
    area_name, 
    rayon_name, 
    penyulang_name 
FROM 
    wilayah 
INNER JOIN area USING(wilayah_id) 
INNER JOIN rayon USING (wilayah_id, area_id) 
INNER JOIN penyulang USING (wilayah_id, area_id,rayon_id) 

aber leer Ergebnis

+0

SELECT penyulang_id, wilayah_name, AREA_NAME, rayon_name, penyulang_name FROM wilayah INNER JOIN Bereich USING (wilayah_id) INNER JOIN rayon USING (wilayah_id, area_id) INNER JOIN penyulang USING (wilayah_id, area_id, rayon_id) 'Rück empty – wawanmadda

+1

Bitte fügen Sie das zu Ihrer Frage hinzu. – rsjaffe

Antwort

0
SELECT 
    penyulang_id, 
    wilayah_name, 
    area_name, 
    rayon_name, 
    penyulang_name 
FROM 
    Penyulang p 
    LEFT JOIN Wilayah w ON w.wilayah_id=p.wilayah_id 
    LEFT JOIN Area a ON a.area_id=p.area_id 
    LEFT JOIN Rayon r ON r.rayon_id=p.rayon_id 
ORDER BY penyulang_id ASC 

angezeigt und schließt sich jede Spalte der entsprechenden Tabelle. Die LEFT JOIN stellt sicher, dass Daten zurückgegeben werden, wenn der Join fehlschlägt (d. H. Der Wert in der Penyulang-Tabelle ist null).

0

Versuchen Sie, diese

select t4.penyulang_id,t1.wilayah_name,t2.area_name,t3.rayon_name, 
t4.penyulang_name 
from wilayah t1 inner join area t2 on t1.wilayah_id =t2.t1.wilayah_id 
inner join rayon t3 on t2.wilayah_id =t3.wilayah_id 
inner join penyulang t4 on t3.wilayah_id = t4.wilayah_id 
0

Sieht aus wie Sie alle Zeilen aus Penyulang wollen.

Und für jede Zeile zurückgegeben, Sie

  • eine Lookup einreihige wollen aus (basierend auf Primärschlüssel) Wilayah
  • eine Lookup einzelne Zeile aus (basierend auf Primärschlüssel) Fläche
  • eine Lookup einzelne Zeile aus (basierend auf Primärschlüssel) Rayon

Es ist wie NULL einige Ihrer Fremdschlüssel-Referenzen sieht sind.

Es sieht also so aus, als müssten Sie nur "Outer Joins" verwenden ... die Zeile aus Penyulang zurückgeben, auch wenn in den anderen Tabellen keine passende Zeile vorhanden ist.

Die LEFT Schlüsselwort gibt eine äußere Join-Operation, wobei eine Reihe von der linken Seite, auch von der rechten Seite, wenn eine passende Zeile zurückgegeben wird, nicht zurückgegeben wird.

SELECT p.penyulang_id 
    , w.wilayah_name 
    , a.area_name 
    , r.rayon_name 
    , w.penyulang_name 
    FROM Penyulang p 
    LEFT 
    JOIN Wilayah w 
    ON w.wilayah_id = p.wilayah_id 
    LEFT 
    JOIN Area a 
    ON a.area_id = p.area_id 
    LEFT 
    JOIN Rayon r 
    ON r.rayon_id = r.rayon_id 
ORDER BY p.penyulang_id 
Verwandte Themen