使用第 5 个 table 将记录从其他 3 个 table 插入到 1 table 中以确定要提取哪些记录
Inserting records into 1 table from 3 other tables using a 5th table to determine which records to pull
我正在使用 SQL-服务器,需要根据其他 3 个 table 的职位编号将记录插入到名为 "dummy" 的 table 中。正在拉取哪些作业编号由称为 "Mmay" 的第 5 个 table 中的值范围决定。在任何 table 中都没有唯一键,作业编号重复。 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
当我 运行 无法绑定代码 "The multi-part identifier "Mmay.jnost" 时出现此错误"
所以在 "accnt"、"jobcost" 或 "servic15" 中的任何地方都有一个 jno 在上述范围之一中的记录,它需要插入到 dummy 中。我如何需要更改我的代码以允许这样做?我对 SQL 比较陌生,我想我需要以某种方式使用连接语句,但我不知道该怎么做。
请尝试此代码。
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
只关注单个查询,因为这会产生同样的问题:
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
)
我正在使用 SQL-服务器,需要根据其他 3 个 table 的职位编号将记录插入到名为 "dummy" 的 table 中。正在拉取哪些作业编号由称为 "Mmay" 的第 5 个 table 中的值范围决定。在任何 table 中都没有唯一键,作业编号重复。 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
当我 运行 无法绑定代码 "The multi-part identifier "Mmay.jnost" 时出现此错误"
所以在 "accnt"、"jobcost" 或 "servic15" 中的任何地方都有一个 jno 在上述范围之一中的记录,它需要插入到 dummy 中。我如何需要更改我的代码以允许这样做?我对 SQL 比较陌生,我想我需要以某种方式使用连接语句,但我不知道该怎么做。
请尝试此代码。
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
只关注单个查询,因为这会产生同样的问题:
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
)