2017-06-13 54 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来完成。 –