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