在SQLServer2008中,如何使用like条件从两个表返回所有记录?

在SQLServer2008中,如何使用like条件从两个表返回所有记录?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我是一名开发人员,正在尝试使用SQL Server 2008,但我被卡住了 我有下面两张桌子 表1 Local Area | ManagerID ABC-SDF-LKJ | 1234 ABC-KJH-GHJ | 4321 XZY-TRS-YEU | 4321 XZY-BFG-GFH | 6789 INT-HSL-DSL | 6789 表2 Region | ManagerID ABC | 4321 INT | 5764 XZY

我是一名开发人员,正在尝试使用SQL Server 2008,但我被卡住了

我有下面两张桌子

表1

Local Area   | ManagerID  
 ABC-SDF-LKJ | 1234  
 ABC-KJH-GHJ | 4321  
 XZY-TRS-YEU | 4321  
 XZY-BFG-GFH | 6789  
 INT-HSL-DSL | 6789  
表2

Region | ManagerID  
 ABC   | 4321  
 INT   | 5764  
 XZY   | 8647
我需要创建一个查询,该查询将返回
ManagerId
的所有行。如果表2中存在一个
ManagerId
,则它应返回表1中的所有行(它们是管理者)以及表1中以它们所管理的区域开头的所有行

给定上述数据,
ManagerId=4321
应返回

ABC-SDF-LKJ  
ABC-KJH-GHJ  
XZY-TRS-YEU  
XZY-BFG-GFH  
XZY-TRS-YEU  
ABC-SDF-LKJ  
ManagerId=8647
应返回

ABC-SDF-LKJ  
ABC-KJH-GHJ  
XZY-TRS-YEU  
XZY-BFG-GFH  
XZY-TRS-YEU  
ABC-SDF-LKJ  
并且应该返回
ManagerId=1234

ABC-SDF-LKJ  
ABC-KJH-GHJ  
XZY-TRS-YEU  
XZY-BFG-GFH  
XZY-TRS-YEU  
ABC-SDF-LKJ  

有人知道怎么做吗

JOIN可以在任意表达式上,而不是像
那样的
,我会使用
左([Local Area],3)
左连接
将返回
表2中列出的区域。
t1.ManagerId=xxxx
的条件将返回
Table1
中与
Table2
中不匹配的值,就像
ManagerId=1234
的值一样

SELECT
  [Local Area]
FROM
  Table1 t1
  -- Matches the Region back to the Local Area
  LEFT JOIN Table2 T2 ON LEFT(t1.[Local Area], 3) = t2.Region
WHERE
  -- For those which have no Region match in Table2
  t1.ManagerId = 1234
  -- And to get the Table1 records which start with the Region from Table2
  OR t2.ManagerId = 1234
下面是一个演示:

这个怎么样:

SELECT *
FROM Table1 T1, Table2 T2
WHERE T1.ManagerID = T2.ManagerID 
OR T1.[Local Area] LIKE T2.Region + '%'
第一个条件负责同一管理者,第二个条件负责区域/区域


Sql小提琴

“Local Area”列的内容实际上应该分为三列。你在这里弄伤了自己。还有我的眼睛。@flup我同意,我继承了DB,改变是不可能的:(你不能做任何创造性的事情?计算列?视图?额外的表中有触发器?@flup我们有两个DBA非常密切地关注所有的变化。请让他们和你一起思考如何解决这个问题,因为他们肯定会同意这是一个糟糕的设计。好答案+1,但不是我想要的。我相信这会帮助其他人。谢谢你的回答。