SQL:仅在连接后返回结果,其中具有不同单词的列表示相同的想法(col 1 'dog' col 2 'hound' = match)



SQL风格是Mode的独特变体,也就是说SQL风格并不重要。如果你能告诉我如何在一种SQL中做到这一点,我至少知道在这种变体中该怎么用谷歌来弄清楚。

我正在连接两个表,并试图识别列,其中一个项目的状态是相同的,但是状态在两个表之间写的不同。

表1列:

<<ul>
  • 名称/gh>
  • 状态(可用、不可用、非活动)
  • 表2列:

    • 状态(未分配、不可用、退役)

    Available = unassigned, unavailable = unavailable, inactive = retired.

    我试图首先比较可用/未分配的队列,非活动/退役队列等。然后我试图只返回两个状态列不匹配的结果,但由于它们使用不同的单词来表示相同的想法,我只是不知道如何做到这一点。

    我只需将状态值重新编码为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
    END
    

    http://sqlfiddle.com/!9/39f243/2

    您可以使用如下内容:

    ; 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.T2Status
    

    相关内容

    • 没有找到相关文章

    最新更新