我正在努力将表1中的数据链接到表3。我正在使用Microsoft SQL Server。我没有太多的经验,但我的研究和测试,我应该使用加入我相信。 我试图根据表1的名称获取Table3的所有列。此路径应为name to name,statecode为statecode。我怎么能继续这个呢?我还提供了我尝试过的代码。
senario的书面例子:&#34;假设table3中有40行。这些行中的10个具有220的状态代码.Bob居住在状态代码220中。然后它应该在状态代码220的表3中显示10行,因为名称是“Bob&#39;”&#34; < / p>
表1列
name | email | phone
表2列
name | statecode | company
表3列
amount | statecode | average
尝试过的代码
select table3.*
from table3
inner join table2
on table3.statecode = table2.statecode
inner join table1
on table2.name = table1.name
where table1.name = 'Bob'
答案 0 :(得分:0)
既然你提到SQL Server我采用了TSQL样式,我就假设这些表与具有通用名称的列相关,这种情况并非如此,但似乎很可能。使用更传统的模式,我希望某些或所有表都有Id
列,作为该表的键。然后外键可能被命名为TableId
。密钥有一个简单的类型,可能Int32
以启用快速索引和约束。
SELECT
C.[Amount],
C.[StateCode],
C.[Average]
FROM
[Table1] A
JOIN
[Table2] B
ON A.[Name] = B.[Name]
JOIN
[Table3] C
ON B.[StateCode] = C.[StateCode]
WHERE
A.[Name] = N'Bob';
我省略了可选关键字,谁需要它们?我已经包含引用的标识符,例如[]
,这些是可选的但很好的做法。该案例使用了在MSDN上广泛使用的匹配,并且使用空格是不寻常的和可选的,但我认为这有助于提高可读性。
答案 1 :(得分:0)
您的代码有什么问题?
这是一个(非常小的)重写,应该可以正常工作:
select t1.*, t2.*, t3.*
from
table1 t1
join table2 t2 on t1.name = t2.name
join table3 t3 on t2.statecode = t3.statecode
where t1.name = 'Bob';
我明确表示你想要查看所有列,而不仅仅是来自table3的数据 - 而且我提供了一些表别名(t1,t2,t3),我找到了帮助结构我的使用sql。
答案 2 :(得分:0)
首先,您必须记住,当您使用大量记录时,使用字符串字段的连接可能会太慢。所以,如果你可以改变给定表的结构,我会做那样的事情:
表1列
IDTable1(主键)|名字|电子邮件|电话
表2列
IDTable2(主键)| FK_IdTable1(Table1的外键)| statecode |公司
表3列
IDTable3(主键)| FK_IdTable2(表2的外键)|量 | statecode |平均
然后,您所要做的就是使用Join声明表之间的关系。
select table3.*
from table3 t3
inner join table2 t2
on t3.FK_IdTable2= t2.IDTable2
inner join table1 t1
on t1.IDTable1 = t2.FK_IdTable1
where t1.name = 'Bob'