【问题标题】:INSERT INTO based on a INNER JOIN'd SELECT column not returning SELECT value基于 INNER JOIN'd SELECT 列的 INSERT INTO 不返回 SELECT 值
【发布时间】:2016-11-19 03:14:52
【问题描述】:

我正在尝试根据CustNo 值将INSERT 转换为Accounts,表格由AccountId 连接。出于某种原因,我无法弄清楚,SELECT cust.CustNo 列基于GivenNameSurnameCusts 表列,尽管在单独测试时使用相同的 WHERE 子句,但它并没有抓住任何东西。

INSERT INTO Accounts (Type, Balance, CustNo)
    SELECT 
        'Chequing', 0, cust.CustNo
    FROM 
        Custs cust
    INNER JOIN 
        Accounts ON cust.CustNo = Accounts.CustNo
    WHERE 
        cust.GivenName = 'FirstName' AND cust.Surname = 'LastName';

我想不出任何理由为什么这不会返回任何错误,但也可以使用相同的WHERE 获取正确的CustNo 作为单独的SELECT。我是否在某处遗漏了将这两个表关联起来的基本字段,或者可能错误地将它们连接起来?

【问题讨论】:

  • 我建议添加表定义和示例数据以及预期输出。这将有助于其他人理解您的问题,并帮助您尽快获得最佳答案。
  • 我完全不明白您为什么要加入 Accounts。您不使用其中的任何字段,如果这是您插入客户的第一个帐户,则联接将导致不返回任何结果
  • @JamesCasey,我为不够清晰而道歉。 Type 和 Balance 来自 Accounts,而 CustNo、GivenName 和 Surname 来自 Custs。
  • 但是如果你要插入它们,它们还不存在,所以当你加入时,你什么也得不到

标签: sql sql-server tsql insert inner-join


【解决方案1】:

虽然我并没有完全回答我最初的问题,但我确实找到了另一种方法来完成我尝试使用嵌套 SELECT 而不是 INNER JOIN 所做的事情。

如果其他人试图根据另一个相关表中的字段(我的 NameSurnameCustNo 问题)将数据 INSERT 到一个表中,请尝试以下操作:

INSERT INTO Accounts (Type, Balance, CustNo)
SELECT 'Chequing', 0, (SELECT CustNo FROM Custs)//This is the solution, a nested Select
WHERE GivenName = 'FirtName' AND Surname = 'LastName');

【讨论】:

  • 您可以通过从原始帖子中的查询中删除内部联接来获得相同的结果
猜你喜欢
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 2012-01-23
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
相关资源
最近更新 更多