I have Bigquery table name_fruits
like this…
x
| name | fruits |
|------|--------|
| aaaa | [apple, orange, grape] |
| bbbb | [apple, orange] |
| cccc | [orange, grape] |
| dddd | [orange] |
| eeee | [orange, peach] |
I am trying to select names that who has fruits both apple
and orange
.
Which means I want to select aaaa
and bbbb
.
The query needs to be dynamic. Can’t hardcode apple
and orange
in the query.
Is there any solution to select them?
SELECT name
FROM name_fruits, UNNEST(fruits) fruit
WHERE fruit IN UNNEST(@find_fruits) # IN query can only "OR" search condition
AND ARRAY_LENGTH(fruits) >= ARRAY_LENGTH(@find_fruits)
# @find_fruits = ["apple", "orange"]
#
# => aaaa, bbbb, cccc, eeee
# I want => aaaa, bbbb
Advertisement
Answer
If I understand correctly, you want to do this with variables. Hence:
SELECT nf.*
FROM name_fruits nf
WHERE (SELECT COUNT(1)
FROM UNNEST(nf.fruits) fruit JOIN
UNNEST(@find_fruits) ff
ON ff = fruit
) >= (SELECT COUNT(*) FROM UNNEST(@find_fruits);