首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:只返回连接后的结果,其中具有不同单词的列表示相同的概念(col1‘dog 2 'hound’= match)

SQL:只返回连接后的结果,其中具有不同单词的列表示相同的概念(col1‘dog 2 'hound’= match)
EN

Stack Overflow用户
提问于 2022-07-05 17:20:31
回答 2查看 25关注 0票数 1

SQL风味是Mode独特的变体,也就是说SQL味道并不重要。如果您可以向我展示如何在一种SQL中执行此操作,我将至少知道Google如何在这种变化中找到它。

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

表1栏:

  • Name
  • Number
  • Status (可用、不可用、不活动)

表2栏:

  • Number
  • Status (未分配、不可用、退役)

可用=未分配,不可用=不可用,非活动=退休。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-05 17:39:35

我只是在WHERE子句中将状态值重新编码为数字代码,如下所示

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2022-07-05 17:36:51

您可以使用如下内容:

代码语言:javascript
复制
; 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72873324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档