【问题标题】:Inserting records into 1 table from 3 other tables using a 5th table to determine which records to pull使用第 5 个表将记录从其他 3 个表中插入 1 个表以确定要提取的记录
【发布时间】:2015-09-18 17:11:55
【问题描述】:

我正在使用 SQL 服务器,需要根据作业编号从其他 3 个表中将记录插入一个名为“dummy”的表中。正在提取哪些作业编号由名为“Mmay”的第 5 个表中的值范围确定。任何表中都没有唯一键,并且作业编号重复。 Mmay 的数据如下所示,jnost 是范围的起始值,jnofn 是范围的结束值。

这是我尝试过但不起作用的代码

INSERT INTO dummy  (code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno)
SELECT code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno 
     FROM accnt 
     WHERE jno BETWEEN Mmay.jnost AND Mmay.jnofn
  UNION ALL
SELECT code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno 
     FROM jobcost 
     WHERE jno BETWEEN Mmay.jnost AND Mmay.jnofn
  UNION ALL
SELECT code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno 
     FROM servic15 
     WHERE jno BETWEEN Mmay.jnost AND Mmay.jnofn

运行代码“无法绑定多部分标识符“Mmay.jnost”时出现此错误

因此,只要“accnt”、“jobcost”或“servic15”中的记录在上述范围之一中具有 jno,就需要将其插入到 dummy 中。我如何需要更改我的代码以允许这样做?我对 SQL 比较陌生,我想我需要以某种方式使用 join 语句,但我不明白该怎么做。

【问题讨论】:

  • 在每个选择中加入 Mmay,例如FROM accnt JOIN Mmay ON Jno BETWEEN Mmay.jnost AND Mmay.jnofn

标签: sql sql-server select join insert


【解决方案1】:

请试试这个代码。

INSERT INTO dummy  (code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno)
SELECT
    RES.*
FROM
    (
        SELECT code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno 
        FROM accnt 
        UNION ALL
        SELECT code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno 
        FROM jobcost 
        UNION ALL
        SELECT code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno 
        FROM servic15 
    ) RES
INNER JOIN Mmay M ON RES.jno BETWEEN M.jnost AND M.jnofn

【讨论】:

    【解决方案2】:

    只关注单个查询,因为这会产生同样的问题:

    SELECT code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno 
    FROM accnt 
    WHERE jno BETWEEN Mmay.jnost AND Mmay.jnofn
    

    更简单的问题更容易解决。

    我怀疑你想要:

    SELECT code, invno, ven, invdate, amon, accno, amnt, jno, saccno, ckno 
    FROM accnt a
    WHERE EXISTS (SELECT 1
                  FROM Mmay
                  WHERE a.jno BETWEEN Mmay.jnost AND Mmay.jnofn
                 )
    

    【讨论】:

    • 那么我可以对每个 select 语句使用相同的代码并在每个语句之间放置 union all 吗?
    • @samhatcher 。 . .是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2017-05-27
    相关资源
    最近更新 更多