# #sql #google-bigquery
Вопрос:
Извините за название, я сделаю все возможное, чтобы объяснить это здесь
У нас есть таблица, подобная следующей:
c1 | c2 |c3
____________
111 | 11 | 2
123 | 11 | 3
111 | 44 | 4
156 | 88 | 7
111 | 44 | 8
444 | 44 | 1
123 | 11 | 4
123 | 55 | 4
Поэтому сначала я хочу проверить c3 и выяснить, есть ли у нас строка со значением = 2 в столбце c3
‘Где c3 = 2’
эта часть проста
После этого мы берем значение c1 (из строки, которую мы получили на предыдущем шаге) — оно будет 111 (так как в этой строке у нас 2 в c3)
А теперь самое сложное, когда мы хотим получить все строки, где, если значение c2 хотя бы однажды имело значение 111 в c1, мы возьмем все строки с этим значением в c2
Например, в первой строке у нас 111 в c1, мы берем значение из c2 и ищем все строки из таблицы, где значение c2 = 11 (хотя значение c1 больше не будет 111)
Это те строки, которые я хочу получить в конце:
c1 | c2 |c3
____________
111 | 11 | 2
123 | 11 | 3
111 | 44 | 4
111 | 44 | 8
444 | 44 | 1
123 | 11 | 4
Ответ №1:
Хммм … один из способов почти напрямую переводит ваши требования в in
условия:
select t.*
from t
where t.c2 in (select t2.c2
from t t2
where t2.c1 in (select t3.c1 from t t3 where t3.c3 = 2)
);