2011-10-05 42 views
1

我在連接兩個不同行數的表格時遇到問題。我試過LEFT JOIN,但它不起作用,我想這是因爲ID_advertentie連接兩個不同行數的表格

查詢:

SELECT * FROM table1 
LEFT JOIN table2 ON table1.ID_kenmerk = table2.ID_kenmerk 
WHERE table1.categorie = 1 AND table2.ID_advertentie = 17 

我怎麼能寫一個查詢與如下表所示例子中提到的結局?

Table 1 
ID_kenmerk  Categorie  Naam_kenmerk Plaatje_kenmerk Data_type 
1   -  1  - Kenmerk a - plaatje1.gif - INT 
2   -  1  - Kenmerk b - plaatje2.gif - BOOL 
3   -  1  - Kenmerk c - Plaatje3.jpg - INT 
4   -  1  - Kenmerk d - plaatje4.jpg - VARCHAR 
5   -  2  - Kenmerk F - plaatje1.gif - INT 
6   -  2  - Kenmerk G - plaartje2.gif - VARCHAR 

Table 2 
ID_kenmerk_data  ID_kenmerk  ID_advertentie  value 
1    -  1  -  17   - Test1 
2    -  2  -  17   - Test2 
3    -  3  -  17   - Test3 
4    -  1  -  23   - lala1 
5    -  2  -  23   - lala2 
6    -  3  -  23   - ajdk2 

結果查詢(WHERE ID_advertentie = 17!)

ID_kenmerk Naam_kenmerk  value 
1   - Kenmerk a - Test1 
2   - Kenmerk b - Test2 
3   - Kenmerk c - Test3 
4   - Kenmerk d - NULL 
+5

爲ID_kenmerk 4,ID_advertentie不是17 ... –

回答

2

你是對的,你需要一個LEFT JOIN。但是,當您執行(LEFTOUTER JOIN時,右表上的任何WHERE條件都會取消外部聯接。

解決方案是將關於(右)的條件table2(在table2.ID_advertentie = 17一個)從WHEREON條款:

SELECT * 
FROM table1 
LEFT JOIN table2 
    ON table1.ID_kenmerk = table2.ID_kenmerk 
    AND table2.ID_advertentie = 17    --- this condition moved 
WHERE table1.categorie = 1 
+0

通過35秒打我! –

3
SELECT * 
FROM table1 
LEFT JOIN table2 ON table1.ID_kenmerk = table2.ID_kenmerk AND table2.ID_advertentie = 17 
WHERE table1.categorie = 1 

剛想說你WHERE子句中使用什麼都可以也可以在ON條款中使用。但將table2.ID_advertentie = 17WHERE移動到ON子句將在右側添加一個NULLed行,如果沒有匹配而不是消除它。

(編輯)的另一種方法:

SELECT * 
FROM table1 
LEFT JOIN table2 ON table1.ID_kenmerk = table2.ID_kenmerk 
WHERE table1.categorie = 1 AND (table2.ID_kenmerk_data IS NULL OR table2.ID_advertentie = 17) 
相關問題