Shirt1:
1;1;"green_shirt";1;1;1
4;4;"yellow_shirt";1;1;1
Shirt2:
1;1;"green_shirt";1;1;1
2;2;"red_shirt";1;1;1
3;3;"orange_shirt";1;1;1
SELECT shirt2.*
FROM shirt1
RIGHT OUTER JOIN shirt2 ON shirt1.key = shirt2.key
WHERE shirt1.description != shirt2.description OR
IFNULL(shirt1.size, -1) != IFNULL(shirt2.size, -1) OR
IFNULL(shirt1.timestamp, -1) != IFNULL(shirt2.timestamp, -1) OR
IFNULL(shirt1.is_on, -1) != IFNULL(shirt2.is_on, -1)
UNION ALL
SELECT shirt1.*
FROM shirt2
RIGHT JOIN shirt1 ON shirt1.key = shirt2.key
WHERE shirt1.description != shirt2.description OR
IFNULL(shirt1.size, -1) != IFNULL(shirt2.size, -1) OR
IFNULL(shirt1.timestamp, -1) != IFNULL(shirt2.timestamp, -1) OR
IFNULL(shirt1.is_on, -1) != IFNULL(shirt2.is_on, -1)
UNION ALL
SELECT shirt1.*
FROM shirt1
INNER JOIN shirt2 ON shirt1.key = shirt2.key
WHERE shirt1.description = shirt2.description OR
IFNULL(shirt1.size, -1) = IFNULL(shirt2.size, -1) OR
IFNULL(shirt1.timestamp, -1) = IFNULL(shirt2.timestamp, -1) OR
IFNULL(shirt1.is_on, -1) = IFNULL(shirt2.is_on, -1)
輸出:
2;2;"red_shirt";1;1;1
3;3;"orange_shirt";1;1;1
4;4;"yellow_shirt";1;1;1
1;1;"green_shirt";1;1;1
如果要排除包括在shirt1襯衫/ shirt2你只需要刪除最後的聯盟。這意味着
SELECT shirt2.*
FROM shirt1
RIGHT OUTER JOIN shirt2 ON shirt1.key = shirt2.key
WHERE shirt1.description != shirt2.description OR
IFNULL(shirt1.size, -1) != IFNULL(shirt2.size, -1) OR
IFNULL(shirt1.timestamp, -1) != IFNULL(shirt2.timestamp, -1) OR
IFNULL(shirt1.is_on, -1) != IFNULL(shirt2.is_on, -1)
UNION ALL
SELECT shirt1.*
FROM shirt2
RIGHT JOIN shirt1 ON shirt1.key = shirt2.key
WHERE shirt1.description != shirt2.description OR
IFNULL(shirt1.size, -1) != IFNULL(shirt2.size, -1) OR
IFNULL(shirt1.timestamp, -1) != IFNULL(shirt2.timestamp, -1) OR
IFNULL(shirt1.is_on, -1) != IFNULL(shirt2.is_on, -1)
輸出:
2;2;"red_shirt";1;1;1
3;3;"orange_shirt";1;1;1
4;4;"yellow_shirt";1;1;1
想想你將要在同一列的一切,所以我想這應該是更好的解決方案。如果您對shirt1/shirt2有不同的欄目,那麼您還可以使用select *並忽略聯合。
關於設備問題:取決於設備,但如果設備是舊的,那麼我不認爲查詢將是您的主要問題。您也可以嘗試添加一些索引來提高性能。
編輯:改變了解決方案的加入對鍵列
它應該工作正常,但嘗試在實際數據和檢查在實際設備上的性能。 – 2012-03-01 06:42:10