2012-05-13 39 views
2

我有以下表格:插入查找值成多列

Table A: 
id int 
v1 string 
v2 string 

Table B: 
key int 
val string 

Table A_v2: 
id int 
v1 int 
v2 int 

我在表A和B.我想表一個轉換表A_v2加載的數據,通過替換每個值(在列v1v2)與表B中相應的鍵。

我希望這是有道理的。如果沒有,我可以舉一個例子。
我正在使用SQLite。

我會如何編寫插入?

EDIT
下面是一個例子:

行中的一個:
1 | abc | def

行中的B:
5 | abc 42 | def

然後在A_v2中的行應該是:
1 | 5 | 42

+0

按照你的建議..請提供一些例子.. 其實我很困惑與表A中對應的列鍵B .. –

+0

@pratikgarg我加了一個例子 – baruch

回答

1

正如我所理解的,您希望將TABLE_A的V1和V2列替換爲TABLE_B中VAL列的值。

如果是這樣,你可以使用下面的查詢..

create table table_a_v2 as 
     select * from table_a where 1>1; 

,並插入到這個表 -

insert into table_a_v2 
select a.id, 
     (select key from table_b whare val= a.v1) v1, 
     (select key from table_b whare val= a.v2) v2 
from table_a 

我不是SQLite的多少確定..但這個命令是有效的,並按照Oracle數據庫工作。

+0

這看起來沒錯。當我回到辦公室時,我會明天嘗試。 – baruch

0

就個人而言,我寧願保持聯接在where子句中,所以我會用以下內容:

insert into A_v2(id, v1, v2) 
    select a.id, bv1.key, bv2.key 
    from a left outer join 
     b bv1 
     on a.v1 = bv1.val left outer join 
     b bv2 
     on a.v2 = bv2.val 

千萬要小心你的「B」表「鑰匙」的多個值。在這種情況下,這些值將返回多行。

您可以通過獨立於「插入」運行「select」查詢來驗證結果。