2016-04-25 71 views
0

对于下列表格;SQL在彼此之上添加行而不是在旁边

PRICE_TABLE    FACT_TABLE 
P_ID     P_ID 
1      0  
2      0 
3      0 
...      .... 

我想获得的PRICE_TABLEP_ID值到FACT_TABLE。我已经使用了以下查询;

INSERT INTO FACT_TABLE(P_ID) SELECT P_ID FROM PRICE_TABLE 

我在FACT_TABLE几个类似领域与其他表IE浏览器。 SALES_TABLE其中S_ID需要以相同的方式来过。

但是像这样运行查询;

INSERT INTO FACT_TABLE(P_ID) SELECT P_ID FROM PRICE_TABLE 

INSERT INTO FACT_TABLE(S_ID) SELECT S_ID FROM SALES_TABLE 

将加到另一个的上面第二INSERT语句,所以当第一组已经完成了第二只的ID开始。

例如。

FACT_TABLE 
P_ID  S_ID 
1  NULL 
2  NULL 
3  NULL 
NULL  1 
NULL  2 
NULL  3 
...  ... 

任何人有任何建议吗?

+1

协会就如何行应该知道这与去你不能关联? SQL表没有固有的顺序。 – Paparazzi

+1

INSERT语句总是添加新行。从上面的描述我不确定你的预期行为是什么,但是如果你想更新第一批用P_IDs创建的行以获得S_IDs,那么你需要使用UPDATE语句来更新现有的行,而不是添加新的? – PulseLab

+0

“PRICE_TABLE”和“SALES_TABLE”之间是否有任何关系? –

回答

0

您正在运行两个单独的插入。所以第一个运行并填充P_ID,然后第二个运行并填充S_ID。你想将两个插入组合成一个。


INSERT INTO FACT_TABLE (P_ID, S_ID) 
VALUES (pt.P_ID, st.S_ID) 
FROM PRICE_TABLE pt 
INNER JOIN SALES_TABLE st 
on st.P_ID = pt.P_ID 

上面是假设PRICE_TABLE和SALES_TABLE具有共同的列(在本例P_ID)。如果他们不这样做,您需要提供更多关于您要完成的内容的信息(您是否希望每个S_ID的每个P_ID,您只需要在P_ID = S_ID等时)。

+0

“PRICE”和“SALES”之间没有关系,每个都有自己的唯一ID,我试图将其放入目前为空的“FACT”表中,但我打算用表中的ID填充它。 – eggman

1

如果你希望他们所有
如果没有要立足于

INSERT INTO FACT_TABLE (P_ID, S_ID) 
SELECT P_ID, S_ID 
FROM  PRICE_TABLE 
CROSS JOIN SALES_TABLE