繁体   English   中英

自外连接也得到空值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM