Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server 2008中连接多个表会导致错误_Sql_Sql Server_Inner Join_Where - Fatal编程技术网

在SQL Server 2008中连接多个表会导致错误

在SQL Server 2008中连接多个表会导致错误,sql,sql-server,inner-join,where,Sql,Sql Server,Inner Join,Where,我正在编写一个连接3个表的查询,我有以下表: Apn[ID、QualHolderID、RecvDate、条形码] QualHolder[身份证、姓氏、全名、出生日期、重新统计ID、性别] Country[ID,Name] Gender[ID,Name] 我编写了以下SQL语句来检索数据: SELECT a.QualHolderID, b.FullName, b.Surname, d.Name, b.DOB, b.ResCountryID, a.RecvDate FROM d

我正在编写一个连接3个表的查询,我有以下表:

  • Apn[ID、QualHolderID、RecvDate、条形码]
  • QualHolder[身份证、姓氏、全名、出生日期、重新统计ID、性别]
  • Country[ID,Name]
  • Gender[ID,Name]
我编写了以下SQL语句来检索数据:

SELECT 
    a.QualHolderID, b.FullName, b.Surname, d.Name, b.DOB, b.ResCountryID, a.RecvDate
FROM
    dbo.Apn a 
INNER JOIN 
    dbo.QualHolder b ON a.QualHolderID = b.ID 
JOIN
    dbo.QualHolder c 
INNER JOIN 
    dbo.Gender d ON c.Gender = d.ID 
WHERE
    b.ResCountryID = 48
但现在我得到了以下错误:

味精102,第15级,状态1,第9行
“ID”附近的语法不正确


我认为正确的问题是:

 SELECT a.QualHolderID, b.FullName, b.Surname, d.Name, b.DOB, b.ResCountryID, a.RecvDate
 FROM dbo.Apn a 
 INNER JOIN dbo.QualHolder b ON a.QualHolderID = b.ID 
 INNER JOIN dbo.Gender c ON b.Gender = c.ID 
 WHERE b.ResCountryID = 48

您不需要两次加入
dbo.QualHolder
表。 试着这样做:

SELECT a.qualholderid, 
       b.fullname, 
       b.surname, 
       d.name, 
       b.dob, 
       b.rescountryid, 
       a.recvdate 
FROM   dbo.apn a 
       INNER JOIN dbo.qualholder b 
               ON a.qualholderid = b.id 
       INNER JOIN dbo.gender d 
               ON b.gender = d.id 
WHERE  b.rescountryid = 48 

您的问题在这里
=b.ID JOIN
使用以下查询并执行

SELECT a.QualHolderID, b.FullName, b.Surname, d.Name, b.DOB, b.ResCountryID, a.RecvDate
FROM (dbo.Apn a INNER JOIN dbo.QualHolder b ON a.QualHolderID = b.ID) 
INNER JOIN dbo.Gender d ON b.Gender = d.ID 
WHERE b.ResCountryID = 48

我建议对您的表使用更有意义的别名!仅仅使用
a、b、c
是混乱的,没有帮助。我会用
a
来表示
Apn
qh
来表示
QualHolder
g
来表示
Gender
等等。这些别名对任何阅读和研究你的问题的人来说都更加清晰和明显。你没有定义别名
c