SQL风味是Mode独特的变体,也就是说SQL味道并不重要。如果您可以向我展示如何在一种SQL中执行此操作,我将至少知道Google如何在这种变化中找到它。
我正在连接两个表,并试图标识一个项的状态相同的列,但是两个表之间的状态写得不一样。
表1栏:
表2栏:
可用=未分配,不可用=不可用,非活动=退休。
我首先尝试比较可用的/未分配的列,非活动的/退休的列等等。然后,我只返回两个状态列不匹配的结果,但是由于它们使用不同的词来表达相同的想法,我只是不知道该如何做。
发布于 2022-07-05 17:39:35
我只是在WHERE子句中将状态值重新编码为数字代码,如下所示
SELECT t1.*,t2.Status FROM t1
LEFT JOIN t2 ON t1.Number = t2.Number
WHERE CASE WHEN t1.Status = 'available' THEN 1
WHEN t1.Status = 'unavailable' THEN 2
WHEN t1.Status = 'inactive' THEN 3
END != CASE WHEN t2.Status = 'unassigned' THEN 1
WHEN t2.Status = 'unavailable' THEN 2
WHEN t2.Status = 'retired' THEN 3
ENDhttp://sqlfiddle.com/#!9/39f243/2
发布于 2022-07-05 17:36:51
您可以使用如下内容:
; With StatusMapping AS
(
SElect 'Available' T1Status , 'Unassigned' T2Status
UNION
SELECT 'Unavailable', 'Unavailable'
UNION
SELECT 'Inactive', 'Retired'
)
SELECT *
FROM T1
INNER JOIN StatusMapping M ON M.T1Status = T1.Status
INNER JOIN T2
ON T1.Number = T2.Number
AND T2.Status = M.T2Statushttps://stackoverflow.com/questions/72873324
复制相似问题