2011-07-07 207 views
1

我正在尝试查找可能从我的数据库中丢失的数据。我有三个表,这是其中的一部分。第一个是事件表,第二个是子事件表,第三个是来自子事件的子事件的个人数据。需要复杂的MySql查询帮助

我想要做的是: 对于每个事件查找与其关联的子事件,如果子事件具有字段tfile设置然后忽略它,如果它不然后看个人'数据。如果有匹配的记录,则输出到列表中。

这里是我想会的工作,但不正确的:

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中有多少项目。它似乎没有找到零(我知道存在)。

按照尼克的建议,我通过

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 

Link to Tables

我已经尝试了约一个小时,以获得这一个查询的工作加到列该组。任何人有任何其他想法?

+0

谢谢卫斯理,我试图做同样的事情,并没有想出来。 –

+0

这个最近的查询的输出是什么? – NickHeidke

+0

0行返回。 –

回答

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 
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 

报告错误/不正确的数据。

+0

尼克,看到上面的mysql我跑了,返回0行。 –

+0

为了使HAVING语句正常工作,您需要将每个字段放在SELECT语句中包含的GROUP BY中。由于您正在执行tb_event。*和cr_event。*,因此您需要在GROUP BY中列出这两个表的所有列。如果您可以发布所有相应表格的列,这可能会有所帮助。 – NickHeidke

+0

尼克我添加了三个表的表结构的链接。希望这可以帮助。感谢您的帮助。 –