Sql server 结构化查询语言连接查询

Sql server 结构化查询语言连接查询,sql-server,tsql,join,syntax,Sql Server,Tsql,Join,Syntax,我是SQL新手。这是多个表的正确连接吗 select * from [dbo].[Quotes] Q ,[dbo].[Invoices] I ,[dbo].[Receipts] R , [dbo].[QuoteLines] QL where QL.QuoteID = Q.ID AND I.QuoteID = Q.ID AND R.QuoteID = Q.ID AND QL.Amount = 336.47 and QL.TravelType = 'International' and

我是SQL新手。这是多个表的正确连接吗

  select * from  [dbo].[Quotes] Q ,[dbo].[Invoices] I ,[dbo].[Receipts] R ,
[dbo].[QuoteLines] QL where QL.QuoteID = Q.ID AND I.QuoteID = Q.ID
    AND R.QuoteID = Q.ID AND QL.Amount = 336.47 and QL.TravelType = 'International' and QL.Type = 'Accommodation'
你的问题

这是多个表的正确联接吗

答案应该是否定的。。。它可能会像预期的那样工作,但这种连接方式已经过时几个世纪了

您的方法将所有表命名为逗号分隔的。这将产生一个巨大的笛卡尔积,即每行与每行的组合。下面的
WHERE
子句确保您将只获得所需的/相关的行和列

不知道你的结构这是一个盲目的飞行,但我认为你在寻找这样的东西:

select * 
from  [dbo].[Quotes] Q 
inner join [dbo].[QuoteLines] QL on Q.ID=QL.QuoteID 
inner join [dbo].[Invoices] I on I.QuoteID=Q.ID
inner join [dbo].[Receipts] R on R.QuoteID=Q.ID

where   QL.Amount = 336.47 
    and QL.TravelType = 'International' 
    and QL.[Type] = 'Accommodation';
如果不是每行的另一侧都有相应的行,您可能需要将
内部
更改为
左侧

您的问题

Try this:- 
Select table1.ID ,table1.Name
from Table1 
inner join Table2 on Table1 .ID =Table2 .ID 
inner join Table3 on table2.ID=Table3 .ID
where table1.Name = Table3.Name
这是多个表的正确联接吗

答案应该是否定的。。。它可能会像预期的那样工作,但这种连接方式已经过时几个世纪了

您的方法将所有表命名为逗号分隔的。这将产生一个巨大的笛卡尔积,即每行与每行的组合。下面的
WHERE
子句确保您将只获得所需的/相关的行和列

不知道你的结构这是一个盲目的飞行,但我认为你在寻找这样的东西:

select * 
from  [dbo].[Quotes] Q 
inner join [dbo].[QuoteLines] QL on Q.ID=QL.QuoteID 
inner join [dbo].[Invoices] I on I.QuoteID=Q.ID
inner join [dbo].[Receipts] R on R.QuoteID=Q.ID

where   QL.Amount = 336.47 
    and QL.TravelType = 'International' 
    and QL.[Type] = 'Accommodation';

如果不是每一行的另一侧都有相应的行,您可能需要将
internal
更改为
left

查询可能会运行,但更大的问题是输出是否是您真正期望的。输出是您期望的吗?查询可能会运行,但更大的问题是输出是否是您真正期望的。输出是你期望的吗?已经过时几个世纪了LOL:-)正如你所说,它显然已经过时了。所有主要的db系统都实现了自2001年以来的加入。几个世纪以来都过时了,LOL:-)正如您所说的,它显然已经过时。自2001年以来,所有主要的数据库系统都实现了JOIN。虽然欢迎使用此代码片段,并可能提供一些帮助,但它将介绍如何以及为什么解决此问题。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。虽然欢迎使用此代码片段,并可能提供一些帮助,但它将说明如何以及为什么解决此问题。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。
Try this:- 
Select table1.ID ,table1.Name
from Table1 
inner join Table2 on Table1 .ID =Table2 .ID 
inner join Table3 on table2.ID=Table3 .ID
where table1.Name = Table3.Name