2016-05-19 57 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)