Извлеките все строки с одинаковым значением в столбце c2, если хотя бы в одной строке у нас есть требуемое значение в столбце c1

# #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)
              );