2012-09-05 88 views
0

我正在嘗試使用3個表正在使用的查詢。第一個table1用於存儲table2和table3的id值以及其他一些數據。在某些情況下,表2或表3中都不存儲任何值,有些情況涉及一個或另一個,有些涉及兩者。MySQL選擇非空時

的問題是,當有任何的表2或表3不值,SQL試圖查找NULL值如下:所以

SELECT table1.id, table2value, table3value 
FROM table1, table2, table3 
WHERE table1value1 = table2.id AND table1value2 = table3.id; 

在此查詢,如果table1value1或table1value2爲NULL,則查詢將不起作用,因爲它顯然不是一個有效的鏈接。所以我想知道如何去尋找只存在的價值。

回答

2

改爲使用INNER JOIN。它將表格與所有表格中現有數據的條件結合在一起。否則那行不會被退回。

SELECT table1.id, table2.value, table3.value 
FROM table1 
INNER JOIN table2 
ON table1.value1 = table2.id 
INNER JOIN table3 
ON table1.value2 = table3.id; 

但是,如果你需要的只有這2行之一,有現有的數據,你可以這樣做:

SELECT table1.id, table2.value, table3.value 
FROM table1 
LEFT JOIN table2 
ON table1.value1 = table2.id 
LEFT JOIN table3 
ON table1.value2 = table3.id; 
WHERE table2.id IS NOT NULL OR table3.id IS NOT NULL 
+0

謝謝了,你答案的第二部分正是我要找的。 – foochow

1

下面的查詢將返回所有3個表中只存在具有值的匹配行。

SELECT table1.id, table2value, table3value 
FROM table1 inner join table2 on table1value1 = table2.id 
inner join table3 on table1value2 = table3.id; 
0

我認爲你需要使用INNER JOIN,根據定義,當兩個表中至少有一個匹配時,INNER JOIN關鍵字將返回行。

SELECT table1.id, table2.value, table3.value 
FROM table1 
      INNER JOIN table2 
      ON table1.value1 = table2.id 
      INNER JOIN table3 
      ON table1.value2 = table3.id; 
0

試試這個:

SELECT table1.id, 
     table2value, 
     table3value 
FROM table1 
JOIN table2 
ON  table1value1 = table2.id 
JOIN table3 
ON  table1value2 = table3.id; 
0

什麼INNER JOIN

SELECT table1.id, table2value, table3value 
FROM table1 INNER JOIN table2 ON table1.value1 = table2.id, 
INNER JOIN table3 ON table1.value2 = table3.id; 
0

您應該使用INNER JOIN

SELECT table1.id, table2value, table3value 
FROM table1 
    INNER JOIN table2 ON table1value1 = table2.id 
    INNER JOIN table3 ON table1value2 = table3.id;