我正在尝试查找数据库中可能缺少的数据。我有三个表是其中的一部分。第一个是事件表,第二个是子事件表,第三个是来自子事件的子事件的个人数据。
我想做的是: 对于每个事件,找到与之关联的子事件,如果子事件具有字段tfile集,则忽略它,如果它没有,则查看个人的数据。如果其中有0个匹配的记录,则输出到列表。
这是我认为可行的,但不对:
select event.*, subevent.* from event.id
join subevent on event.id = subevent.eid
join pdata on subevent.subid = pdata.subid
where subevent.textfile = ''
and Count(pdata.subid) = 0;
编辑:从用户添加代码,使用真实的表名:
SELECT tb_event.*, cr_event.*
FROM tb_event
INNER JOIN cr_event ON tb_event.id = cr_event.eid
INNER JOIN searchable_data ON cr_event.id = searchable_data.race_id
WHERE cr_event.tfile = ''
GROUP BY cr_event.id
HAVING Count(searchable_data.race_id) = 0
其他信息,我认为问题在于searchable_data中有多少项。它似乎没有找到零(我知道存在)。
根据Nick的建议,我通过
向该组添加了列SELECT tb_event.*, cr_event.id
FROM tb_event
INNER JOIN cr_event ON tb_event.id = cr_event.eid
INNER JOIN searchable_data ON cr_event.id = searchable_data.race_id
WHERE cr_event.tfile = ''
GROUP BY tb_event.id, tb_event.ename, tb_event.ecity, tb_event.eplace, tb_event.elocation, tb_event.zip, tb_event.day, tb_event.year, tb_event.etime, tb_event.logo, tb_event.remail, tb_event.descr, tb_event.link, tb_event.reg, tb_event.rname, tb_event.created_by, cr_event.id
HAVING Count(searchable_data.race_id) = 0
我已经尝试了大约一个小时来使这一个查询正常工作。有没有其他想法?
答案 0 :(得分:0)
尝试类似:
SELECT tb_event.*, cr_event.id
FROM tb_event
INNER JOIN cr_event ON tb_event.id = cr_event.eid
INNER JOIN searchable_data ON cr_event.id = searchable_data.race_id
WHERE cr_event.tfile = '' OR cr_event.tfile IS NULL
GROUP BY tb_event.id, tb_event.ename, tb_event.ecity, tb_event.eplace, tb_event.elocation, tb_event.zip, tb_event.day, tb_event.year, tb_event.etime, tb_event.logo, tb_event.remail, tb_event.descr, tb_event.link, tb_event.reg, tb_event.rname, tb_event.created_by, cr_event.id
HAVING Count(searchable_data.race_id) = 0
报告错误/返回的错误数据。
答案 1 :(得分:0)
你正试图计算一些东西 - 好吧,因为你的INNER JOIN而不存在。
您需要保留s中没有任何匹配数据的t / c组合。请参阅以下查询以列出在s中没有任何数据的所有t / c id对(由于GROUP BY而唯一)。
SELECT t.id, c.id
FROM tb_event t
INNER JOIN cr_event c ON t.id = c.eid
LEFT OUTER JOIN searchable_data s ON c.id = s.race_id
WHERE c.tfile = ''
AND s.race_id IS NULL -- This is what you need to check for
GROUP BY t.id, c.id