我有一个包含两个表的数据库(Table1和Table2)。 Table1有一列ColumnA,Table2有一列ColumnB我想要选择两列
寻找类似的东西:
表1中的ColumnA:
a
b
c
表2中的ColumnA:
d
e
f
结果集应为:
a d
b e
c f
提前致谢..
答案 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