我有两个看起来像这样的表:
T1: ID | oldID
T2: ID | newID
我基本上需要在ID匹配时加入这些表。但是,我只想返回如下结果:ID | oldID | newID,其中oldID不等于newID。
示例数据:
T1: 1 | 100
2 | NULL
3 | 200
4 | 500
T2: 1 | NULL
2 | 300
3 | 200
4 | 400
我的预期结果:
T3: 1 | 100 | NULL
2 | NULL | 300
4 | 500 | 400
有人能指出我走在正确的轨道上吗?
答案 0 :(得分:0)
对于SQL Server
SELECT T1.ID ,T1.oldID,T2.[newID]
FROM T1
INNER JOIN T2 ON T1.ID = T2.ID AND ISNULL(T1.oldID,0) <> ISNULL(T2.[newID],0)
对于MySql,请使用IFNULL
代替ISNULL
。
如果零(0
)是oldID
或newID
中的值,则可以使用ISNULL
函数的任何其他未使用值(即-1
)
答案 1 :(得分:0)
试试这个答案,希望这有帮助
var yourObject = new YourObject {
Email = "email",
Password = "password"
};
string s = client.UploadString("http://localhost:1111/Service.svc/SignIn","POST", JsonConvert.SerializeObject(yourObject));
答案 2 :(得分:0)
select t1.ID,t1.oldID,t2.NewId
FROM T1 t1, T2 t2
WHERE t1.ID=t2.ID
AND COALESCE(t1.oldID,0) <> COALESCE(t2.NewId,0)
select t1.ID,t1.oldID,t2.NewId
FROM T1 t1, T2 t2
WHERE t1.ID=t2.ID #IDs are equal in two tables
AND t1.oldID <> t2.NewId
Result is:
# ID, oldID, NewId
'4', '500', '400'
如果您这样检查,您将无法获得预期的结果,原因是NULL值未得到正确处理。 但是如果您使用COALESE意味着它将检查如下:
COALESCE(值1,值2,值3,...)
以上语法等同于以下IF-THEN-ELSE语句
IF value1 is not NULL THEN
result = value1;
ELSIF value2 is not NULL THEN
result = value2;
ELSIF value3 is not NULL THEN
result = value3;
ELSE
result = NULL;
END IF;
实施例: SELECT COALESCE(NULL,2,3);返回2
所以在我们的Query中,如果t1.oldID为null,COALESCE(t1.oldID,0)将返回0 ..
select t1.ID,t1.oldID,t2.NewId
FROM T1 t1, T2 t2
WHERE t1.ID=t2.ID
AND COALESCE(t1.oldID,0) <> COALESCE(t2.NewId,0)