SQL Server查询问题 - 模糊列

时间:2015-11-11 19:52:53

标签: sql sql-server function

我有四张桌子:

  1. Applicant(援助,aname)
  2. entrance_test(Etid,etname)
  3. etest_centre(etcid,location)
  4. etest_details(援助,etid,etcid,etest_dt)
  5. 我想选择每个测试中出现的申请人数,测试中心明智。

    这是我目前的查询:

    select 
        location, etname, count(Aid) as number of applicants
    from 
        applicant as a 
    inner join 
        etest_details as d on a.aid = d.aid 
    inner join 
        Entrance_Test as t on t.Etid = d.Etid
    inner join 
        Etest_Centre as c on c.Etcid = d.Etcid
    group by 
        Location, Etname
    

    这是我得到的错误:

      

    不明确的列名'Aid'

2 个答案:

答案 0 :(得分:1)

您在多个表格中都有列aid,并且它不知道从中挑选哪个。您应该使用您定义的别名指定它来自哪个表。

在这种情况下,由于a.Aid与d.Aid相同(由于JOIN),我使用a别名,但请注意{ {1}}和location也会出现在多个表中,您需要指定应从哪个表中选择。

etname

根据经验,当您在一个查询中有多个源时,您应该始终明确它应该来自哪个表。即使你确定它只存在于其中一个中,但在未来避免这类问题也是一个好习惯。

答案 1 :(得分:0)

您需要在COUNT子句中提及别名。由于您使用的是别名,因此如果您在SELECTGROUP BY部分中使用它们会更好。在这种情况下,它应该是:

SELECT          a.location,
                a.etname,
                COUNT(d.Aid) 

FROM            applicant AS a
INNER JOIN      etest_details AS d ON a.aid = d.aid 
INNER JOIN      Entrance_Test AS t ON t.Etid = d.Etid
INNER JOIN      Etest_Centre AS c ON c.Etcid = d.Etcid
GROUP BY        a.Location,
                a.Etname