Tôi đang thiết kế một truy vấn SQL động sẽ kiểm tra một bảng nguồn dựa vào bảng đích. Tôi muốn so sánh các hàng của nguồn với các hàng của mục tiêu để kiểm tra sự khác biệt.So sánh các số NULL
CREATE TABLE TABLE_A (KEY INT, COL1 INT, COL2 INT)
CREATE TABLE TABLE_B (KEY INT, COL1 INT, COL2 INT)
Vì vậy, tôi đã tạo ra tuyên bố này:
SELECT A.* FROM TABLE_A A
INNER JOIN TABLE_B B
ON B.KEY = A.KEY
AND (B.COL1<>A.COL1 OR B.COL2<>A.COL2)
Nhưng điều này chỉ hoạt động chừng nào các giá trị của col1 và col2 không null. Nếu table-a col1 là null và table-b col1 là null thì tôi sẽ cân nhắc chúng bằng nhau.
Tôi biết tôi có thể đặt ISNULL quanh các cột của tôi, nhưng đây là truy vấn động đang được xây dựng, vì vậy tôi chỉ biết tên cột không phải là kiểu dữ liệu.
Mọi đề xuất?
Điều gì sẽ xảy ra nếu (mặc dù tôi cho rằng điều này không thể xảy ra với tên) trường 'khóa' là NULL? 'ON (B.KEY = A.KEY OR (A.KEY IS NULL và B.KEY IS NULL))'? – MatBailie
@Dems - Không phải (hoặc ít nhất là câu hỏi chỉ đề cập đến 'col1, col2'). –
Cảm ơn! Hoạt động hoàn hảo! – user829237