左连接可选表

时间:2013-03-21 07:11:34

标签: php mysql sql wordpress

我尝试选择表格pep_posts然后离开加入pep_postmeta,但表pep_postmeta是可选的,如果表pep_postmeta中没有数据,结果仍然可以显示。< / p>

下面是我的查询,但此查询仅显示数据,如果表pep_postmeta有数据,这不是我想要的。

select p.*, pm.* 
from `pep_posts` p 
left join `pep_postmeta` pm 
  on pm.post_id=p.ID 
where p.post_parent='".$current_page_id."' and
     p.post_status='publish' and pm.meta_key='book_image' 

2 个答案:

答案 0 :(得分:2)

在左连接中,如果引用WHERE子句中的可选表,它仍将仅过滤掉该表中具有值的行。您需要做的是将pm上的条件移至ON子句,在该子句中不会删除行,只需将值设置为NULL

SELECT p.*, pm.* 
FROM `pep_posts` p 
LEFT JOIN `pep_postmeta` pm 
  ON pm.post_id=p.ID and pm.meta_key='book_image' 
WHERE p.post_parent='".$current_page_id."' AND
     p.post_status='publish'

答案 1 :(得分:1)

WHERE条件中的问题

and pm.meta_key='book_image' 

如果pep_postmeta没有数据,则选择中的pm.meta_key值将为NULL 所以,您应该删除此条件或将其重写为此类

and (pm.meta_key='book_image' or pm.meta_key IS NULL)