我正在尝试比较来自相同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的不同地址。
答案 0 :(得分:30)
自己加入表格,并在下面的示例中为其提供两个不同的别名(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 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
我想这可能有助于找到帐单地址(地址代码= 1作为示例)与递送地址不同的客户(地址代码= 2)。
答案 1 :(得分:4)
这适用于PL / SQL:
select count(*), id,address from table group by id,address having count(*)<2
答案 2 :(得分: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
答案 3 :(得分:0)
就个人而言,我会使用Perl或Python以
格式将它们打印到文件中<COL_NAME>: <COL_VAL>
每行,以便文件的行数与列数一样多。然后我会在两个文件之间做一个diff
,假设你在Unix上或者在另一个操作系统上使用一些等效的实用程序来比较它们。如果你有多个记录集(即多行),我会在每个文件行前加上,然后该文件将有NUM_DB_ROWS * NUM_COLS行