【问题标题】:Select two columns for two different tables in SQL Server 2000在 SQL Server 2000 中为两个不同的表选择两列
【发布时间】:2009-12-04 14:46:27
【问题描述】:

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

寻找类似的东西:

表1中的A列:

一个

b

c

表2中的A列:

d

e

f

结果集应该是:

一丁点

b e

c f

提前谢谢..

【问题讨论】:

  • 这两个表之间是否存在实际关系?即,他们是否设置了主键和外键?

标签: sql-server


【解决方案1】:

我很确定 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

【讨论】:

  • 非常好的逻辑。它帮助了我。谢谢。
【解决方案2】:

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

你应该建立一个关系。

你到底想达到什么目的?

【讨论】:

  • 我将两个参数传递给 sp 都是逗号分隔的字符串。然后在 sp 中将字符串转换为两列。这些列必须与另一个表连接以进行更新。
【解决方案3】:

我不知道大局,但从你所说的来看,这是一个例子。必须有某种方法来定义表 1 中的哪条记录应该与表 2 中的记录匹配。我假设它们在按每个表中的列排序时匹配排序(例如,表 1 中的记录 1 由A 列与表 2 中按 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

【讨论】:

  • 这正是我要发布的内容。
【解决方案4】:

系统如何知道将表 1 中的“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

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    相关资源
    最近更新 更多