SQL Server加入和通配符

时间:2010-05-24 12:11:11

标签: sql sql-server sql-server-2000

我想得到两个表之间左连接的结果,两个表都有一个同名的列,我加入的列。 SQL Server中的导入/导出向导将以下查询视为有效,但始终会出错。我有一些更多的条件,所以尺寸不会太大。我们正在使用SQL Server 2000 iirc,因为我们使用外部开发的程序与数据库交互(除了我们无法检索的某些信息),我们不能简单地更改列名。

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

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

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

由于它是一个公共列,因此它试图在结果集中创建两次,从而阻塞你的进程。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果要从两个表中选择所有列,只需使用Select *而不是分别包含表。但是,这会在结果集中留下重复的列名,因此即使按名称读取它们也行不通,按索引读取它们会产生不一致的结果,因为更改数据库中的列会更改结果集,从而违反任何代码在列的序号上。

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

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