【问题标题】:Creating a join table in SQL Server在 SQL Server 中创建连接表
【发布时间】:2015-08-27 21:16:57
【问题描述】:

假设我有两个表 A 和 B,每个表都有唯一的 ID 列 A_id 和 B_id。然后假设我有一天醒来并确定这两个表有关系。因此,我创建了一个包含 A_id、B_id 对的表 AB。然后我编写一个 SQL 服务器脚本,根据表中的其他数据插入这些对,比如 A_name 和 B_name。我希望实际插入能够像这样工作(尽管用户通过 Powershell 脚本或其他东西输入了更高级的 WHERE 子句):

INSERT INTO AB (A_id, B_id) 
VALUES 
((SELECT (A_id) FROM A WHERE A_name = 'bob'), 
 (SELECT (B_id) FROM B WHERE B_name = 'john'))

我不确定此类操作的正确语法。谁能指出我正确的方向?

【问题讨论】:

  • 您想使用JOIN 操作,然后从它的输出中使用SELECT。

标签: sql-server sql-insert database-management


【解决方案1】:

您应该从两个表的连接中进行选择,而不是从两个子选择中进行选择,使用您要使用的任何逻辑:

INSERT INTO AB (A_id, B_id)
SELECT a.A_id, b.B_id
FROM A 
INNER JOIN B
 ON A.SomeColumn=B.SomeColumn

或者,为了更准确地复制您的示例,它看起来像这样:

INSERT INTO AB (A_id, B_id)
SELECT a.A_id, b.B_id
FROM A 
INNER JOIN B
 ON A.A_name='bob'
 AND B.B_name='john'

【讨论】:

  • 没有等于 B.SomeColumn 的 A.SomeColumn。那里的逻辑对于 SQL 脚本来说可能太高级了,或者只是由用户指定:“嗯……我认为 Bob 和 John 应该通过 AB 表关联……”
  • 直到评论之后才发现您的添加。
猜你喜欢
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2017-11-02
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多