2011-07-07 120 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

尼克我添加了三個表的表結構的鏈接。希望這可以幫助。感謝您的幫助。 –