2017-10-09 54 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;