LEFT JOIN无法正确行事

时间:2017-10-09 09:50:05

标签: sql postgresql

我的问题是让一行显示两个空值。

我的表格如下所示

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)

我需要从valaistus ON 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)

1 个答案:

答案 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;