我在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数据。对我所做错的任何建议都会非常受欢迎。
提前致谢。
答案 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)
感谢您的所有回复。
吉姆