SQL Server连接和通配符

SQL Server连接和通配符,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,我想得到两个表之间左连接的结果,两个表都有一个名称相同的列,我连接的列。SQL Server中的导入/导出向导认为以下查询有效,但它总是给出错误。我还有一些条件,所以尺寸不会太大。我们使用的是SQLServer2000IIRC,因为我们使用的是外部开发的程序与数据库交互(除了一些无法通过这种方式检索的信息),所以我们不能简单地更改列名 SELECT table1.*, table2.* FROM table1 LEFT JOIN table2 ON table1.samename = tab

我想得到两个表之间左连接的结果,两个表都有一个名称相同的列,我连接的列。SQL Server中的导入/导出向导认为以下查询有效,但它总是给出错误。我还有一些条件,所以尺寸不会太大。我们使用的是SQLServer2000IIRC,因为我们使用的是外部开发的程序与数据库交互(除了一些无法通过这种方式检索的信息),所以我们不能简单地更改列名

SELECT table1.*, table2.* 
FROM table1 
LEFT JOIN table2 ON table1.samename = table2.samename

至少,我认为列名是问题所在,还是我做错了什么?

除了join键之外,还有更多的列具有相同的名称吗?如果只有您的连接键具有相同的名称,那么只需选择其中一个,因为除了不匹配的行(将为NULL)之外,这些值将是等效的。不过,您必须从其中一个表中枚举所有其他列

SELECT table2.samename,table1.othercolumns,table2.*
FROM table1 
LEFT JOIN table2 ON table1.samename = table2.samename

您可能需要显式列出其中一个表(字段较少的表)中的列,并省略重复字段的第二个实例

select Table1.*, {skip the field Table2.sameName} Table2.fld2, Table2.Fld3, Table2.Fld4...  from

因为它是一个公共列,所以它似乎试图在结果集中创建两次,从而阻塞了您的进程。

因为您不应该使用select*,只需将其替换为所需列的列名即可。联接列在联接的两侧具有相同的值(或null),因此仅选择其中一个,即表1中始终具有该值的列。

如果要从两个表中选择所有列,只需使用
选择*
,而不是单独包含表。但是,这将在结果集中留下重复的列名,因此即使按名称读取列名也不起作用,而按索引读取列名也会产生不一致的结果,因为更改数据库中的列将更改结果集,从而根据列的序号断开任何代码

不幸的是,最好的解决方案是精确地指定所需的列,并为重复项创建别名,以便它们是唯一的


通过将查询设置为文本模式并复制顶行,我可以快速获取列标题…

它会给您带来什么错误??字段samename已存在于表Results中该错误似乎是Microsoft Jet错误,而不是SQL Server错误。()我认为这篇专栏是这两篇文章中唯一出现的一篇。我希望在选择后使用table1.*和table2.*会导致结果表中的列名为table1.*和table2.*这样就不会出现列名问题(一个返回为table1.samenae,另一个返回为table2.samenae)。我希望避免枚举其中一个表的所有列