2016-12-14 63 views
0

你好,我有一個關於MySQL查詢的問題。mysql查詢where =值可能存在或不存在

以下查詢是我想要得到的結果。

但是,color_all表中的一個thumb_file列可能有數據,或者可能是NULL

$query = "SELECT DISTINCT(p.location), p.no, c.thumb_file FROM product_pics AS p, color_all AS c 
       WHERE style_number = '$style' AND p.color = c.color ORDER BY p.sort ASC"; 

其實,我可以讓這個查詢類似下面的查詢2:

$query = "SELECT DISTINCT(location), no, color FROM product_pics WHERE style_number = '$style' ORDER BY ASC"; 
    $result = mysql_query($query); 
    while(list($loc, $no, $color) = mysql_fetch_array($result)){ 
      $sub_query = "SELECT thumb_file FROM color_all WHERE color = '$color'"; 
    } 

但我只是想知道如何使這2個查詢爲一體。

+0

這就是所謂的'左JOIN' – Simon

+0

@Simon感謝您的回答,是有可能左連接時,一列有數據或爲空。 –

+0

左連接將從LEFT(1st)表中取所有值,並將其連接到RIGHT(2nd)表並在第二個表中沒有數據的地方追加null – Simon

回答

1

選擇FROM多個表執行兩者的連接,WHERE子句過濾掉顏色不匹配的任何結果行,其中product_pics根本沒有顏色信息。這相當於一個INNER JOIN

SELECT DISTINCT(p.location), p.no, c.thumb_file 
FROM product_pics AS p 
INNER JOIN color_all AS c ON c.color = p.color 
WHERE style_number = '$style' 
ORDER BY p.sort ASC"; 

運行該查詢,你應該看到完全相同的結果,你現在所擁有的:只返回其中product_pics是一種顏色,在color_all該顏色匹配的行。

你在找什麼是OUTER JOIN,它不會過濾掉連接列中一側或另一側有空值的行。外連接有兩種口味,LEFTRIGHT。前者是最常見的,因爲通常查詢是從源表格寫入輔助表格。該查詢應該給你你想要的東西:

SELECT DISTINCT(p.location), p.no, c.thumb_file 
FROM product_pics AS p 
LEFT OUTER JOIN color_all AS c ON c.color = p.color 
WHERE style_number = '$style' 
ORDER BY p.sort ASC"; 
+0

謝謝!欣賞這正是我想要的。 ^^ –