2017-06-19 50 views
1

我想表2基于根据由给出的表1来更新:BIGQUERY分配基于表中的值表1 2

Row  sample_id PIK3CA_features 
1  huDBF9DD chr3_3268035_CT 
2  huDBF9DD chr3_3268043_AT 
3  huDBF9DD chr3_3268049_T 

表2:

Row  sample_id chr3_3268035_CT chr3_3268043_AT chr3_3268049_C 

1  huDBF9DD 1    1    null 
2  huDBF9De null    null    null 
3  huDBF9Dw null    null    null 

对于每个如果它的samle_id在表2中对应,那么我想将表2中的PIK3CA_feature更新为1.

如何通过sample_idPIK3CA_features表1中的值作为用于更新SQL命令中的表2的参数?

回答

1

您可以使用UPDATE statement来完成此操作。假设我理解正确的话,你想是这样的查询:

#standardSQL 
UPDATE table2 AS t2 
SET 
    chr3_3268035_CT = 
    IF(t1.PIK3CA_features = 'chr3_3268035_CT', 1, chr3_3268035_CT), 
    chr3_3268043_AT = 
    IF(t1.PIK3CA_features = 'chr3_3268043_AT', 1, chr3_3268043_AT), 
    chr3_3268049_C = 
    IF(t1.PIK3CA_features = 'chr3_3268049_C', 1, chr3_3268049_C) 
FROM table1 AS t1 
WHERE true; 

这将设置在表2中的相应的列有根据的PIK3CA_features值的值为1。如果你有很多这些列,您可以使用Python或其他编程语言生成的查询,也可以使用查询生成所有column_name=expression双:

#standardSQL 
SELECT 
    STRING_AGG(FORMAT('%s=IF(t1.PIK3CA_features="%s",1,%s)', 
        PIK3CA_features, PIK3CA_features, PIK3CA_features), ',\n') 
FROM (
    SELECT DISTINCT PIK3CA_features 
    FROM table1 
); 

这将产生类似的列表:

chr3_3268035_CT=IF(t1.PIK3CA_features="chr3_3268035_CT",1,chr3_3268035_CT), 
chr3_3268049_C=IF(t1.PIK3CA_features="chr3_3268049_C",1,chr3_3268049_C), 
chr3_3268043_AT=IF(t1.PIK3CA_features="chr3_3268043_AT",1,chr3_3268043_AT) 
+0

我试过了。此处PIK3CA_features在目标表上不可用以更新(引发错误)。在要更新的目标表中,有像chr3_3268035_CT这样的值可以在输入表的PIK3CA_features下使用。任何方式来使用这些值的更新命令? – eilalan

+0

我不明白你的意思。你的问题显示表1有一个'PIK3CA_features'列。如果这不正确,请更新您的问题以更具体。 –

+0

我想更新表2:行sample_id chr3_3268035_CT chr3_3268043_AT chr3_3268049_C,根据表1:行sample_id PIK3CA_features。也许顺序很混乱。感谢您的快速回复 – eilalan

相关问题