使用第5个表将记录从3个其他表中插入1个表中,以确定要提取哪些记录

时间:2015-07-01 13:43:22

标签: sql sql-server select join insert

我正在使用SQL-server,需要根据工作号从其他3个表中将记录插入到名为“dummy”的表中。正在拉取的工作号由第5个表中名为“Mmay”的值范围决定。任何表中都没有唯一的键,并且作业编号重复。来自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“无法绑定”

enter image description here

所以到处都有“accnt”,“jobcost”或“servic15”中有一个jno在上述范围之一的记录,它需要插入到虚拟中。如何更改我的代码才能实现此目的?我相对较新的SQL,我想我需要以某种方式使用连接语句,但我不明白该怎么做。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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
             )