我有以下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。
有什么想法吗?
答案 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'