我想比较来自相同的ID两个地址,看看它们是否匹配。 例如:
Id Adress Code Address
1 1 123 Main
1 2 123 Main
2 1 456 Wall
2 2 456 Wall
3 1 789 Right
3 2 100 Left
我只是想弄清楚的地址为每个ID是否匹配。 因此,在这种情况下,我想回到刚才ID 3为具有不同的地址,地址代码1和2。
加入表本身,并给它的两个不同的别名( A
和B
在下面的示例中)。 这允许比较同一表的不同行。
SELECT DISTINCT A.Id
FROM
Address A
INNER JOIN Address B
ON A.Id = B.Id AND A.[Adress Code] < B.[Adress Code]
WHERE
A.Address <> B.Address
在“小于”的比较<
确保您能获得2个不同的地址,你没有得到同样的2个地址码的两倍。 使用“不等于” <>
代替,将产生码作为(1,2),(2,1); 对于它们中的每一个A
别名和B
反过来别名。
JOIN子句是负责这里的WHERE子句测试附加条件行的配对。
上述查询与任何地址码的工作。 如果你想与特定的地址码比较地址,您可以更改查询
SELECT A.Id
FROM
Address A
INNER JOIN Address B
ON A.Id = B.Id
WHERE
A.[Adress Code] = 1 AND
B.[Adress Code] = 2 AND
A.Address <> B.Address
我想,这可能是有用的,以找到具有帐单地址(ADRESS代码= 1作为一个例子)的客户从递送地址(ADRESS代码= 2)不同。
这适用于PL / SQL:
select count(*), id,address from table group by id,address having count(*)<2
您可以使用一组由做到这一点:
select id, addressCode
from t
group by id, addressCode
having min(address) <> max(address)
写这个的另一种方式似乎更加清晰,但不执行,以及:
select id, addressCode
from t
group by id, addressCode
having count(distinct address) > 1
就个人而言,我将它们打印格式使用Perl或Python文件
<COL_NAME>: <COL_VAL>
每一行,以使文件具有与现有的列尽可能多的行。 然后,我会做一个diff
两个文件之间,假设你是在Unix或使用其他操作系统的一些等价utilty对它们进行比较。 如果你有多个记录(即多行),我会在前面加上每个文件行的文件,然后将有NUM_DB_ROWS * NUM_COLS线