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