[英]Self outer join get nulls also
我有一个数据库,表中的记录如下结构;
id, message, date_added, fid, fid_sort
19, "start uploads", "2012-02", NULL, 20
20, "end uploads", "2012-03", 19, 20
21, "start uploads", "2012-04", NULL, 20
我有一个像这样设置的整个数据库,其中fid
在某些情况下与另一条记录的id
匹配。 我想返回所有具有匹配开始日期和结束日期的记录,如果没有相应的结束日期fid
,则只返回开始日期,如下所示:
19, "start uploads", "2012-02", "end uploads", "2012-03", 20
21, "start uploads", "2012-04, "", NULL, 20
fid_sort
是链接到父表的pid_sort
以提取任务名称的数字。
SELECT startdt.id, startdt.message, startdt.date_added, enddt.message
, enddt.date_added, stardt.fid_sort
FROM tasks as startdt
LEFT OUTER JOIN tasks as enddt
ON startdt.id = enddt.fid
AND enddt.message LIKE '%end%'
WHERE startdt.message LIKE '%start%'
AND enddt.fid_sort = 20
目前这只返回匹配的记录,但我也想要 null 结束日期记录。 我想要所有 startdate 记录,无论它们是否有相应的结束日期记录。
将AND enddt.fid_sort = 20
更改为AND startdt.fid_sort = 20
解决了我的问题,例如
SELECT startdt.id, startdt.message, startdt.date_added enddt.message
, enddt.date_added, stardt.fid_sort
FROM tasks as startdt
LEFT OUTER JOIN tasks as enddt ON startdt.id = enddt.fid
AND enddt.message LIKE '%end%'
WHERE startdt.message LIKE '%start%'
AND startdt.fid_sort = 20
SELECT startdt.id, startdt.msg, startdt.date, enddt.msg, enddt.date
FROM yourtable as startdt
LEFT OUTER JOIN yourtable as enddt ON startdt.id = enddt.fid
WHERE startdt.msg = 'start'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.