Sql 不明确的列名“countryname”

Sql 不明确的列名“countryname”,sql,sql-server,sql-server-2008,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获取不同的行。 请帮助…您应在选择中指定表格。例如: BEGIN SELECT distinct c.country

我写了一个如下的程序

BEGIN 
SELECT distinct countryname, countryid 
 FROM Country c 
  Inner join Cause cs on cs.CountryName = c.CountryName
 END
它显示错误消息,如不明确的列名“countryname”

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

您应在选择中指定表格。例如:

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

如果在您的查询中,多个表上有相同的列名,那么解释器需要知道这是哪一列

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

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

建议:

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

将您的模型设计为可在唯一整数或guid索引上联接,避免在CountryName上联接,除非您可以100%保证不会出现拼写错误,即使这样,这也是糟糕的设计

为表使用别名时,请确保每个表的字段都由各自的别名表示。 例如,您使用别名c表示国家表,使用别名cs表示原因,所以为了使用国家表中的任何列,请使用c.column\u name。 显示错误消息是因为两个表中可能有相同的列名,并且sql server不知道您引用的是哪个表中的哪个列

所以你的代码应该是

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

在SELECT子句中使用c.CountryName而不是CountryName。使用此选项:从国家c内部连接中选择不同的c.CountryName、c.countryid,因为cs.CountryName=c.CountryName在选择列表中使用别名\u name.column\u name,因为两个表中都可能存在CountryName列。
BEGIN 
SELECT distinct c.countryname, c.countryid 
 FROM Country c 
  Inner join Cause cs on cs.CountryName = c.CountryName
 END