使用第 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
             )