google bigquery - Semijoin expression must be a part of logical AND -


i have table (we can call "a") fields (model:string, age:integer, code1:integer, code2:integer, code3:integer) , table (it can "codes") classified codes (code:integer,codetype:string,description:string).

that field codetype there in order group codes. example, codes between 200 , 300 brown. , every item can have 3 codes.

now, want simple, simple query:

select model,age dataset.a code1 in (select code dataset.codes codetype='brown') 

and works, except fact, there 2 other ones. so, if in way:

select model,age dataset.a code1 in (select code dataset.codes codetype='brown') or code2 in (select code dataset.codes codetype='brown') or code3 in (select code dataset.codes codetype='brown') 

it doesn't work , error message:

error: (xx:yy): semijoin expression (i.e. "x in (select ...)") must part of logical and. 

i sure google should have way this.

by way, project developing not "a" , "codes". need solution this. help.

bigquery indeed has limitation in subqueries must connected ands. workaround, may execute each select separately, , union results, i.e.

select model, age (select model,age dataset.a code1 in (select code dataset.codes codetype='brown')), (select model,age dataset.a code2 in (select code dataset.codes codetype='brown')), (select model,age dataset.a code3 in (select code dataset.codes codetype='brown')) 

this may result in duplicates of (model, age) pairs, if not desired, can remove duplicates using group model, age


Comments