2012-07-15 28 views
0

我想使用從表中獲取數據的select查詢。MySQL/PHP:如果值不是0,則使用內部連接

它看起來像這樣

SELECT table1.value1, table1.value2, table1.id, table2.id, table2.value2 
FROM table1 
INNER JOIN table2 
ON table2.id = table1.value4 
ORDER BY table1.id DESC 
LIMIT 10 

雖然table1.value4有時是0,沒有table2.id值爲0,並因爲它是一個自動遞增值,它從1開始,我希望它開始在1.

因爲當它等於0那麼該特定的行不可用,只是其他的。

但我想一些如何設置一個where子句,它應該只得到table2值如果table1.value4不等於0

+1

where table1.value4 <> 0 - 實際上如果所有的table2.id都不爲零,你的內連接將不會拾取任何零ta ble1.value4行,即使沒有where子句 – 2012-07-15 14:06:08

+0

正如@dan_l所說 - 除非你的意思是你希望即使沒有相應的table2值也會出現table1值。在這種情況下,您應該考慮使用LEFT JOIN而不是INNER。 – shunty 2012-07-15 14:07:59

+0

你試過一些測試數據嗎?我認爲dan_I是正確的。你的加入應該已經照顧到了 – codingbiz 2012-07-15 14:08:37

回答

2

你真正想要什麼,似乎是一個LEFT JOIN然後。即使在table2中沒有匹配(與table1.value4 = 0一樣),將返回table1的所有行。

SELECT table1.value1, table1.value2, table1.id, table2.id, table2.value2 
FROM 
    table1 
    LEFT JOIN table2 
    ON table2.id = table1.value4 
ORDER BY table1.id DESC 
LIMIT 10 
+0

現在完美!謝謝! :) – 2012-07-15 14:09:40

0

嘗試這種::

如果你沒有在表2 ID 0,下面的查詢工作正常::

SELECT table1.value1, table1.value2, table1.id, table2.id, table2.value2 
FROM table1 
INNER JOIN table2 
ON table2.id = table1.value4 
ORDER BY table1.id DESC 
LIMIT 10 

但也有表2中ID爲0,你一定值想要被忽略然後

SELECT table1.value1, table1.value2, table1.id, table2.id, table2.value2 
FROM table1 
INNER JOIN table2 
ON (table2.id = table1.value4 and table1.id!=0) 
ORDER BY table1.id DESC 
LIMIT 10