2017-06-13 98 views
1

考慮三個SQL表使用值,
PEOPLE的列 - name(VARCHAR),age(整數)
INFO的列 - email(VARCHAR),phone(VARCHAR)
和一個master_table爲 -從表中的SQL查詢

ID | TABLENAME  | RECORD 
--- | -------------- | ------------------------------------------------------------------ 
1 |  PEOPLE | "{"name": "Mary", "age": 12}" 
2 |  INFO  | "{"email": "[email protected]", "phone": "321-456"}" 

現在,我希望寫加載從master_table數據到相應的表的查詢。在東西線OF-

INSERT INTO @TABLENAME VALUES @RECORD AS JSON 'AUTO' 

其中,@TABLENAME是說,SELECT TABLENAME FROM MASTER_TABLE WHERE ID=1
@RECORDSELECT RECORD FROM MASTER_TABLE WHERE ID=1

怎麼可能實現這一目標?

回答

1

事情是這樣的:

insert into people (name, age) 
select record::json ->> 'name', (record::json ->> 'age')::int 
from master_table 
where tablename = 'PEOPLE'; 

insert into info (email, phone) 
select record::json ->> 'email', record::json ->> 'phone' 
from master_table 
where tablename = 'INFO'; 
+0

感謝您的回答!然而,我的用例要求我抽象出master_table中的數據,即我不知道TABLENAME列中可能存在哪些表名,在這種情況下,不能使用 'where tablename ='PEOPLE';'或 'where tablename ='INFO';' 我以某種方式需要從表中提取它並在查詢中使用它 –

+0

並假定這些表存在於數據庫中並且JSON鍵與列名匹配 –

+0

@C .Thullu:那麼你需要動態SQL和存儲函數。這不能用「靜態」SQL來完成。 –