【问题标题】:Assemble two sql queries result that have nothing in common组装两个没有共同点的sql查询结果
【发布时间】:2015-04-15 16:53:29
【问题描述】:

如果这些值是从两个没有共同点的不同表中检索的,我如何将这些值插入到表中? 从第一个表中,我将只检索(SELECT)一个值,其余值将从第二个表中检索。

我想从第一个表中检索第一个值,从第二个表中检索其余值,然后将所有这些值返回到我要执行的 INSERT 中。

编辑:这里是结构示例:

这是表格。我希望这很清楚。请随时向我询问更多详细信息。

CREATE TABLE table1
(id int,  productName  varchar(7),  description  varchar(55))
;

CREATE TABLE table2
(id int,  productName  varchar(7))
;

这是我尝试过的:

INSERT INTO table2 (`id`,`productName`)
SELECT COALESCE(Max(id + 1), 0) 
FROM table2 
UNION 
SELECT productName 
FROM table1

这显然会给我一个错误,但至少我希望这更清楚。

【问题讨论】:

  • 您应该对两个表执行某种连接,然后插入一个结果集。如果您发布表格结构,您将获得解决方案
  • 所以要清楚,对于第一个表中的每个值,您想要第二个表中的每个值并插入结果?也就是说,如果第一个表有10个值,第二个表有5个值,你要插入50个结果吗?
  • 详情请参阅新版编辑。

标签: sql oracle merge


【解决方案1】:

使用内联视图获取Table2 的最大当前 ID。然后用Table1 CROSS JOIN 生成笛卡尔积。我认为您需要为新记录使用不同的 ID,因此我建议您为每一行增加派生的最大 ID。

INSERT INTO table2 (id,productName) 
SELECT  t2.max_id + rownum
       , t1.productName   
FROM ( select COALESCE(Max(t2.id), 0) as max_id 
       from table2 ) t2
     CROSS JOIN  table1 t1

【讨论】:

  • 感谢您的提示!我会试一试,让你知道它是否有效!
猜你喜欢
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2020-12-22
相关资源
最近更新 更多