У нас есть проблема, когда нам нужно объединить данные между несколькими таблицами в качестве фильтров для набора пользователей. Подзапросы дают мне тот же результат, когда я использую только одно условие как «простой» запрос только с одним условием, но когда я использую несколько подзапросов, я получаю что-то намного выше, как будто это не фильтрация и выполнение операции AND, как Я бы ожидал. На простом воссоздании я проверил, что результаты двух подзапросов и их «простой» эквивалент идентичны - поэтому с моей стороны это какая-то синтаксическая ошибка в том, как я проверяю user_id в двух подзапросах.
Какой синтаксический сахар мне не хватает, чтобы использовать два подзапроса вместе, как обычный фильтр AND, чтобы во втором примере я получил 32, как я и ожидал? Если он указан c для программного обеспечения, я делаю этот запрос к базе данных AWS Snowflake.
"Правильный" запрос может быть выполнен для одной таблицы, например:
Ex. 1: Это дает мне 32:
SELECT COUNT(DISTINCT table_a.user_id)
FROM table_a
WHERE cond_1 AND cond_2
Пример. 2: Это дает мне 104:
SELECT Count(DISTINCT table_b.user_id )
FROM table_b
WHERE (
table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_1)
AND
table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_2)
)
ПРИМЕЧАНИЕ Для контекста я проверил, что подзапросы работают и дают те же данные, что и простые условия WHERE:
дает мне результат 25:
SELECT COUNT(DISTINCT table_a.user_id)
FROM table_a
WHERE cond_1
дает мне результат 25:
SELECT Count(DISTINCT table_b.user_id )
FROM table_b
WHERE (
table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_1)
)
дает мне результат 48:
SELECT COUNT(DISTINCT table_a.user_id)
FROM table_a
WHERE cond_2
дает мне результат 48:
SELECT Count(DISTINCT table_b.user_id )
FROM table_b
WHERE (
table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_2)
)