2016-05-19 93 views
2

我們試圖從MySQL數據庫上的多個表中進行選擇。在MySQL中還包含NULL行SELECT Query

我們的查詢是:

SELECT r.reviews_id, 
     r.customers_name, 
     r.date_added, 
     rd.reviews_text, 
     r.reviews_rating, 
     c.customers_email_address 
FROM reviews r, reviews_description rd, customers c 
WHERE r.customers_id = c.customers_id 
    AND r.reviews_id = rd.reviews_id 
    AND r.products_id = '74' 
    AND r.approved='1' 
ORDER BY LENGTH(rd.reviews_text) DESC 

但是,表reviews也對現場customers_id

命令WHERE r.customers_id = c.customers_id是限制其只能有一個customers_id

我場NULL項想知道我們如何也可以選擇NULL字段?我們嘗試過WHERE (r.customers_id = c.customers_id) OR (r.customers_id IS NULL) - 但這不起作用。

非常感謝您的幫助。

+0

或條件應該是這樣的(r.customers_id = C .customers_id或r.customers_id IS NULL) – JYoThI

回答

2

不要使用舊的隱式連接語法。用明確連接 - 在這種情況下left join

select r.reviews_id, r.customers_name, r.date_added, rd.reviews_text, r.reviews_rating, 
     c.customers_email_address 
FROM reviews r 
INNER JOIN reviews_description rd ON r.reviews_id = rd.reviews_id 
LEFT JOIN customers c ON r.customers_id = c.customers_id 
WHERE r.products_id = '74' 
AND r.approved='1' 
ORDER BY LENGTH(rd.reviews_text) DESC 
+0

非常感謝 - 這很好。 –

+0

但是,查詢似乎有點慢。有什麼辦法可以優化嗎?謝謝你的幫助。 –

+0

是的,閱讀有關索引。但是,由於您在'order by'中使用了一個函數,查詢只能在'where'子句中的過濾條件中得到改進。 –

-2

它應該是這樣的:

WHERE (r.customers_id = c.customers_id = 0 OR r.customers_id IS NULL) 

取而代之的是:

WHERE (r.customers_id = c.customers_id) OR (r.customers_id IS NULL)