Tham gia bảng đó và cung cấp cho nó hai bí danh khác nhau (A và B) . Điều này cho phép so sánh các hàng khác nhau của cùng một bảng.
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
So sánh "ít hơn" <
đảm bảo bạn nhận được 2 địa chỉ khác nhau và bạn không nhận được 2 mã địa chỉ giống nhau hai lần. Sử dụng "không bằng" <>
thay vào đó, sẽ mang lại các mã như (1, 2) và (2, 1); mỗi người trong số họ cho bí danh A
và bí danh B
lần lượt.
Điều khoản tham gia chịu trách nhiệm cho việc ghép nối các hàng trong đó điều khoản where kiểm tra các điều kiện bổ sung.
CẬP NHẬT:
Các truy vấn trên làm việc với bất kỳ mã địa chỉ. Nếu bạn muốn so sánh địa chỉ bằng mã địa chỉ cụ thể, bạn có thể thay đổi các truy vấn để
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
Tôi tưởng tượng rằng điều này có thể hữu ích để tìm kiếm khách hàng có địa chỉ thanh toán (Địa chỉ Mã = 1 là một ví dụ) khác nhau từ địa chỉ giao hàng (Mã địa chỉ = 2).
Nguồn
2012-12-04 17:15:52
Cool! Bạn đã thử cái gì? –
RDBMS nào? Nếu SQL Server, hãy thử xem [câu hỏi này] (http://stackoverflow.com/q/510916/1220971). – Bridge
Rất tiếc, tôi đang sử dụng tính năng này trong Teradata. –