在SQL Server 2000中为两个不同的表选择两列

时间:2009-12-04 14:46:28

标签: sql-server

我有一个包含两个表的数据库(Table1和Table2)。 Table1有一列ColumnA,Table2有一列ColumnB我想要选择两列

寻找类似的东西:

表1中的ColumnA:

a

b

c

表2中的ColumnA:

d

e

f

结果集应为:

a d

b e

c f

提前致谢..

4 个答案:

答案 0 :(得分:4)

我很确定sql server 2000支持表变量,所以你可以试试这个

DECLARE @TableA TABLE(
        ID INT IDENTITY(1,1),
        Val VARCHAR(50)
)

INSERT INTO @TableA (Val) SELECT ColumnA FROM Table1

DECLARE @TableB TABLE(
        ID INT IDENTITY(1,1),
        Val VARCHAR(50)
)

INSERT INTO @TableB (Val) SELECT ColumnB FROM Table2

SELECT a.Val,
        b.Val
FROM    @TableA a INNER JOIN
        @TableB b ON a.ID = b.ID

答案 1 :(得分:3)

由于两个表之间没有关系,因此未真正定义此操作。 table1中的哪一行与table2中的哪一行相关?

你应该建立一种关系。

无论如何,你想要实现什么目标?

答案 2 :(得分:2)

我不知道大局,但从你所说的,这是一个例子。必须有一些方法来定义表1中的哪个记录应该与表2中的记录匹配。我假设它们在按照每个表中的列排序时匹配排序(例如,表1中的记录1由列A,与表B中由列B)排序的记录1匹配。此示例需要SQL 2005或更高版本。

DECLARE @T1 TABLE (A varchar(10))
DECLARE @T2 TABLE (B varchar(10))

INSERT @T1 VALUES ('a')
INSERT @T1 VALUES ('b')
INSERT @T1 VALUES ('c')
INSERT @T2 VALUES ('d')
INSERT @T2 VALUES ('e')
INSERT @T2 VALUES ('f')

SELECT A, B
FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY A ASC) AS RowNo, A
    FROM @T1
) t1
JOIN
(
    SELECT ROW_NUMBER() OVER (ORDER BY B ASC) AS RowNo, B
    FROM @T2
) t2 ON t1.RowNo = t2.RowNo

答案 3 :(得分:0)

系统如何知道将table1中的'a'值与表2中的'd'值相关联?如果有人向table2添加另一行,其值为'c',现在您的查询将输出

 null-  c
  a  -  d
  b  -  e
  c  -  f

  a  -  c
  b  -  d
  c  -  e

  a  -  c
  b  -  d
  c  -  e
 null-  f

??? ---您必须以某种方式指定用于将table1中的行与table2中的行相关联的规则。

如果您只想根据字母排序关联相关行, 然后,如果每个表中的值都是唯一的(仅使用标准SQL),请尝试使用

   Select Z1.ColumnA, z2.ColumnB
   From  (Select ColumnA,
              (Select Count(*) 
               From Table1
               Where ColumnA < t1.ColumnA) RowNo,
          From Table1 T1) z1
    Join (Select ColumnB,
              (Select Count(*) 
               From Table2
               Where ColumnB < t2.ColumnB) RowNo,
          From Table2 T2) z2
       On z1.RowNo = z2.RowNo
   Order By z1.RowNo