如何从两个不可连接的表的每一个中选择前1个ID?

时间:2018-09-12 12:27:57

标签: sql ms-access

我在数据库上有一个n对n的关系,现在想填充中间的连接表。

我遇到的问题与that guy here相同,但是我的两个表没有直接关系。

所以我的第一次尝试是:

INSERT into foo_has_bar (foo_ID, bar_ID) VALUES (
  (Select TOP 1 ID from foo where foo_cond = "TRUE"),
  (Select TOP 1 ID from bar where bar_cond = "TRUE")
)

现在这无效并返回

  

查询输入必须至少包含一个表或查询

现在尝试按上面的链接中所述的形式创建它时,我将需要以下内容:

INSERT into foo_has_bar (foo_ID, bar_ID)
Select foo.ID, bar.ID FROM foo, bar
...
)

但是我现在如何合并 SELECT TOP 1WHERE并仅将对应的{{1} }})?

2 个答案:

答案 0 :(得分:2)

我希望此查询在MS Access中可以工作:

INSERT into foo_has_bar (foo_ID, bar_ID)
    VALUES ((Select TOP 1 ID from foo where foo_cond = "TRUE"),
            (Select TOP 1 ID from bar where bar_cond = "TRUE")
           );

但是如果没有,请尝试以下操作:

INSERT into foo_has_bar (foo_ID, bar_ID)
    SELECT f.ID, b.ID
    FROM (Select TOP 1 ID from foo where foo_cond = "TRUE"
         ) as f,
         (Select TOP 1 ID from bar where bar_cond = "TRUE"
         ) as b;

请注意:通常您应该将ORDER BYTOP一起使用,这样您获得的ID是一致的。

答案 1 :(得分:0)

我通过that question中的提示找到的实际解决方案:

INSERT into foo_has_bar (foo_ID, bar_ID)
VALUES (DLOOKUP("ID", "foo", "foo_cond = ""TRUE"""),
        (DLOOKUP("ID", "bar", "bar_cond = ""TRUE"""),
       );

糟糕的访问权限