2016-01-26 61 views
0

我有一個父表和多個子表。MySQL具有不同參數的多個工會刪除重複項

使用UNION語句,我已經能夠從子項中提取信息,但是當我想從父表中提取沒有子表的項時,查詢只會導入父表中的所有內容再次。

這是查詢我迄今爲止:

SELECT id, view_ptr_id, parent_id, `name` 
display_type AS display_type, NULL AS title, NULL AS `text`, 
source_url AS source_url 
FROM content_child_1 
left JOIN content_parent 
ON content_parent.id = content_child_1.view_ptr_id 
UNION 

SELECT id, view_ptr_id, parent_id, `name`, 
NULL AS display_type, title AS title, NULL AS `text`, 
NULL AS source_url 
FROM content_child_2 
LEFT JOIN content_parent 
ON content_parent.id = content_child_2.view_ptr_id 
UNION 

SELECT DISTINCT id, NULL as view_ptr_id, parent_id, `name`, 
NULL AS display_type, NULL AS title, NULL AS `text`, 
NULL AS source_url 
FROM content_parent 

例如:
- 所述查詢的第一部分返回10項 - 查詢的第二部分返回另一個10項 - 的最後一部分也應該返回10個項目(沒有孩子的項目),但它返回30個項目。

我的現實我有大約30個20個子字段的子表,所以如果有人能告訴我如何以更簡單的方式來做到這一點,那麼您更受歡迎。
這裏的問題是所有的子表都有自己的列。

在此先感謝。

回答

0

您可以在最後一個查詢中使用LEFT OUTER JOIN,檢查沒有匹配的記錄。

SELECT id, view_ptr_id, parent_id, `name` 
display_type AS display_type, NULL AS title, NULL AS `text`, 
source_url AS source_url 
FROM content_child_1 
left JOIN content_parent 
ON content_parent.id = content_child_1.view_ptr_id 
UNION 

SELECT id, view_ptr_id, parent_id, `name`, 
NULL AS display_type, title AS title, NULL AS `text`, 
NULL AS source_url 
FROM content_child_2 
LEFT JOIN content_parent 
ON content_parent.id = content_child_2.view_ptr_id 
UNION 

SELECT DISTINCT id, NULL as view_ptr_id, parent_id, `name`, 
NULL AS display_type, NULL AS title, NULL AS `text`, 
NULL AS source_url 
FROM content_parent 
LEFT OUTER JOIN content_child_1 
ON content_parent.id = content_child_1.view_ptr_id 
LEFT OUTER JOIN content_child_1 
ON content_parent.id = content_child_2.view_ptr_id 
WHERE content_child_1.view_ptr_id IS NULL 
AND content_child_2.view_ptr_id IS NULL