2017-10-09 21 views
0

我的問題獲取一行顯示兩個空值。左連接不能正確地得到它

我的表顯示如下

FROM tuote; 
    ttunnus |   tnimi   |  kuvaus  | suositushinta | tmtunnus 
    ---------+-----------------------+--------------------+---------------+---------- 
     111 | Trimmeri TRCee  | tehokas 4-tahtinen |  179.00 |  1 
     112 | Trimmerisiima Cee  | laadukas siima  |   6.99 |  1 
     113 | Moottorisaha MSCee RR | robusti ja raskas |  559.00 |  1 
     114 | Trimmerisiima Y  | yleissiima   |   3.99 |  2 
     115 | Lapio L    | kevyt yleislapio |   23.95 |  2 
    (5 rows) 

FROM kategoria; 
ktunnus | knimi 
---------+----------- 
     11 | puutarha 
     14 | valaistus 
     12 | metsä 
     13 | lumityöt 
(4 rows) 

FROM tuote_kategoria; 
ttunnus | ktunnus 
---------+--------- 
    111 |  11 
    112 |  11 
    113 |  11 
    113 |  12 
    114 |  11 
    115 |  11 
    115 |  13 
(7 rows) 

我需要從表信息與valaistusON NULL values in tnimi and suositushinta

knimi |   tnimi   | suositushinta 
-----------+-----------------------+--------------- 
puutarha | Trimmeri TRCee  |  179.00 
puutarha | Trimmerisiima Cee  |   6.99 
puutarha | Moottorisaha MSCee RR |  559.00 
metsä  | Moottorisaha MSCee RR |  559.00 
puutarha | Trimmerisiima Y  |   3.99 
puutarha | Lapio L    |   23.95 
lumityöt | Lapio L    |   23.95 
valaistus |      | 
(8 rows) 

,但我只得到像這樣不正確的方式。

SELECT t2.knimi, t1.tnimi, t1.suositushinta 
    FROM tuote t1, tuote_kategoria 
    LEFT JOIN kategoria t2 ON t2.ktunnus = tuote_kategoria.ktunnus 
    WHERE t1.ttunnus = tuote_kategoria.ttunnus; 
     knimi |   tnimi   | suositushinta 
    ----------+-----------------------+--------------- 
    puutarha | Trimmeri TRCee  |  179.00 
    puutarha | Trimmerisiima Cee  |   6.99 
    puutarha | Moottorisaha MSCee RR |  559.00 
    metsä | Moottorisaha MSCee RR |  559.00 
    puutarha | Trimmerisiima Y  |   3.99 
    puutarha | Lapio L    |   23.95 
    lumityöt | Lapio L    |   23.95 
    (7 rows) 
+0

您是外側連接'kategoria'到其他表,當它應該是反過來的。順便說一句:您將1992年以前的逗號分隔連接語法('FROM tuote t1,tuote_kategoria')與適當的ANSI連接('LEFT JOIN kategoria t2 ON ...')混合在一起。你不應該再使用舊的連接語法。 –

+0

在逗號分隔的項目之前評估JOIN鏈。 – jarlh

+0

永遠不要將隱式聯接與顯式聯接混合使用 –

回答

1

想要顯示kategoria記錄,即使它們在其他表中沒有匹配。所以選擇from kategoria和外部聯接其他兩個表:

select 
    k.knimi, 
    t.tnimi, 
    t.suositushinta 
from kategoria k 
left join tuote_kategoria tk on tk.ktunnus = k.ktunnus 
left join tuote t on t.ttunnus = tk.ttunnus;