在SQLServer2008中,如何使用like条件从两个表返回所有记录?
我是一名开发人员,正在尝试使用SQL Server 2008,但我被卡住了 我有下面两张桌子 表1在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
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,但不是我想要的。我相信这会帮助其他人。谢谢你的回答。