我會用這個不同的表設計,類型和子類型。 Your Items表具有單列主鍵,而您的Blog_Posts和Articles表的主鍵與Items表的外鍵具有相同的ID。這將使得這樣做非常容易,並且有助於確保數據的完整性。
與您現有的設計,你最好的選擇可能是這樣的:
SELECT
I.item_id,
I.source_id,
COALESCE(A.date_posted, B.date_posted) AS date_posted,
COUNT(*) AS date_count
FROM
Items I
LEFT OUTER JOIN Articles A ON
A.item_id = I.item_id AND
I.source_id = 'A' -- Or whatever the Articles ID is
LEFT OUTER JOIN Blog_Posts B ON
B.item_id = I.item_id AND
I.source_id = 'B' -- Or whatever the Blog_Posts ID is
GROUP BY
I.item_id,
I.source_id,
COALESCE(A.date_posted, B.date_posted)
您也可以嘗試使用UNION
:
SELECT
SQ.item_id,
SQ.source_id,
SQ.date_posted,
COUNT(*) AS date_count
FROM
(
SELECT I1.item_id, I1.source_id, A.date_posted
FROM Items I1
INNER JOIN Articles A ON A.item_id = I1.item_id
WHERE I1.source_id = 'A'
UNION ALL
SELECT I2.item_id, I2.source_id, B.date_posted
FROM Items I2
INNER JOIN Articles B ON B.item_id = I2.item_id
WHERE I2.source_id = 'B'
)
+1:我無法在MySQL上測試,但在SQL Server上測試時,它的優化效果非常好(我沒有預計) – MatBailie 2012-01-03 16:42:57
***注意:***同樣假設索引與'date_posted'作爲第一個領域的最佳性能。 – MatBailie 2012-01-03 16:43:37