php mysql连接4个表可能的空值

时间:2012-09-12 11:30:15

标签: mysql join

我有以下sql查询数据库并从4个不同的表中提取信息。

 SELECT d.item AS day, m.item as month, y.item as yr, l.item as local
 FROM date_day d
 JOIN date_month m ON d.recid=m.recid
 JOIN date_year y ON d.recid=y.recid
 JOIN location l ON d.recid=l.recid
 WHERE d.recid='cneta0ld00s6'

这些表中的一个或多个可能为空并且不包含值。特别是在日期字段上。以上任何一个是空的还是不存在的,会导致整个事情失败?我特别担心date_day因为我知道mysql没有FUll JOIN。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为:

SELECT d.item AS day, m.item as month, y.item as yr, l.item as local
 FROM date_day d
 LEFT JOIN date_month m ON d.recid=m.recid
 LEFT JOIN date_year y ON d.recid=y.recid
 LEFT JOIN location l ON d.recid=l.recid
 WHERE d.recid='cneta0ld00s6'

会做你想要的事情

答案 1 :(得分:1)

为了确保我总是从表中获取数据,即使它是null,我在另一个表中添加了主表,一个总是包含recid,表是照片。这样我确保查询将始终返回一些东西,即使它有很多空值。这意味着我也可以使用左连接。

 SELECT p.photo_file, d.item AS day, m.item as month, y.item as yr, l.item as local
  FROM photo p
 LEFT JOIN date_day d ON p.recid=d.recid
 LEFT JOIN date_month m ON p.recid=m.recid
 LEFT JOIN date_year y ON p.recid=y.recid
 LEFT JOIN location l ON p.recid=l.recid
 WHERE p.recid='paul'