【问题标题】:Oracle SQL Inserting multiple rows into a table while referencing 2 FKOracle SQL在引用2 FK时将多行插入表中
【发布时间】:2021-06-16 18:42:00
【问题描述】:

我正在尝试插入来自同一个表的值 id_team_FK 和 id_location_FK。 例如 id_team_FK = 4 和 id_location_FK = 150。问题是,id_team_FK 必须是从 team_table 中随机选择的值(这可行),我需要知道确切的数字(例如 4)才能实现分配给它的 id_location_FK(对于例 150)。如何让它发挥作用?

   insert into test (PK, id_team_FK,id_location_FK)
values (1,
-- Selects random number from table
(select * from  (id_team_FK from team_table  order by dbms_random.random) where rownum=1),
-- needs to know the value of id_team_FK to know what select...
(select * from ( select id_location_FK from team_table) where team_table.id_team_FK = id_team_FK));

【问题讨论】:

  • 如果您从同一个表中选择两列,则只需使用一个select 选择它们。 id_team_FKid_location_FK 之间是否存在一对多的关系?
  • @astentx 这是一对一的关系
  • 那为什么不insert into test select * from (select 1 as id, id_team_fk, id_lication_fk from team_table order by dbms_random.random()) where rownum = 1)
  • @astentx 也可以,谢谢!

标签: sql oracle oracle-sqldeveloper sqlplus


【解决方案1】:

CTE 怎么样?先选择ID_TEAM_FK,用它来获取ID_LOCATION_FK,插入结果。

INSERT INTO test (pk, id_team_fk, id_location_fk)
   WITH
      temp
      AS
      -- select random number from table
         (SELECT id_team_fk
            FROM (  SELECT id_team_FK
                      FROM team_table
                  ORDER BY DBMS_RANDOM.random)
           WHERE ROWNUM = 1),
      temp2
      AS
      -- now you know ID_TEAM_FK (you fetched it in the TEMP CTE), so - fetch ID_LOCATION_FK
         (SELECT id_team_fk, id_location_fk
            FROM (SELECT a.id_team_fk, b.id_location_FK
                    FROM team_table a CROSS JOIN temp b
                   WHERE a.id_team_FK = b.id_team_FK))
   SELECT 1, id_team_fk, id_location_fk
     FROM temp2;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多