不明确的列名称' countryname'

时间:2015-07-24 06:38:34

标签: sql sql-server sql-server-2008

我写了一个如下的程序

BEGIN 
SELECT distinct countryname, countryid 
 FROM Country c 
  Inner join Cause cs on cs.CountryName = c.CountryName
 END

它显示错误消息,例如"不明确的列名称' countryname'。"

我想根据countryname和countryid获取不同的行。 请帮忙......

3 个答案:

答案 0 :(得分:2)

您应在select中指定表。例如:

BEGIN 
SELECT distinct c.countryname, c.countryid 
 FROM Country c 
  Inner join Cause cs on cs.CountryName = c.CountryName
 END

答案 1 :(得分:2)

如果在您的查询中,多个表上的相同列名可用,则Interpreter需要知道哪个列是什么意思。

在您的情况下,您应该像这样编写查询:

SELECT DISTINCT c.countryname, countryid 
FROM Country c INNER JOIN Cause cs 
    ON cs.CountryName = c.CountryName

SELECT DISTINCT cs.countryname, countryid 
FROM Country c INNER JOIN Cause cs 
    ON cs.CountryName = c.CountryName
  

建议:

     
      
  • 您可能希望始终在所有列上指定别名

  •   
  • 将您的模型设计为可以在唯一的整数或guid索引上连接,避免加入" countrynames"除非你能100%保证永远不会出现拼写错误(即使那时设计也不好)。

  •   

答案 2 :(得分:1)

alias使用tables时,请确保每个表的字段由各自的别名表示。 例如,您为c表使用了别名country,为cs使用了cause,因此为了使用country表中的任何列,请使用{{1} }。 显示您的错误消息是因为两个表中的列名可能相同,而c.column_name并不知道您从哪个表中引用哪个列。

所以你的代码应该像

sql-server