左连接部分匹配SQL Server

时间:2018-01-10 17:30:46

标签: sql sql-server

我在SQL Server中有2个表,我试图进行左连接,以便显示table1中的所有记录,并显示table2中的任何数据(如果存在)。它们如下

表1

id         Customername    Jobid    
--------------------------------
2754444    Jones           123    
2854233    Smith           234

表2

key                Location    
-----------------------------
FD#2754444         London    
FEC#2854233        Liverpool

我可以得到一个内连接查询,如下所示 - 但我显然只得到匹配的记录,(我不想要 - 我想要table1中的所有记录和table2中的任何匹配值)

这有效:

$query = "select distinct table1.id, table1.customername, table1.jobid, table2.location, table2.[key]
from table1
inner join table2
on table1.id= RIGHT([table2].[key],7)"

因此将其更改为左连接:

这不起作用:

$query = "select distinct table1.id, table1.customername, table1.jobid, table2.location, table2.[key]
from table1
left join table2
on table1.id = RIGHT([table2].[key],7)"

它不会返回任何table2数据。对我所做错的任何建议都会非常受欢迎。

提前致谢。

2 个答案:

答案 0 :(得分:0)

我整理了一个SQL Fiddle来表明您的查询应该有效(基于对数据类型的猜测)。鉴于您已将查询包装为字符串,这就提出了问题是您的问题是否实际上是SQL,或者ODBC(或其他)连接实际上是否返回了解析器错误而不是结果集。您是否看过数据库提供的回报?您是否确保每个单词之间都有空格,即使是换行符(按原样复制文本显示CR和LF,但检查您的代码);否则,您很可能会发送类似于" SELECT * FROMTABLEWHERETHING"" SELECT * FROMTABLEWHERETHING"而不是" SELECT * FROM TABLE WHERE"。

答案 1 :(得分:0)

谢谢大家的意见。由于某种原因,RIGHT没有返回任何东西所以我设法解决:

左JOIN [table2] ON [table1] .id = substring([key],(CHARINDEX('#',[key],1)+1),7)

感谢您的所有回复。

吉姆