У меня довольно сложный SQL-запрос, который мне нужно создать. Прости меня, я не волшебный волшебник с SQL.Сложная группировка в SQL-запросе
Вот мои две таблицы (значительно упрощены):
TABLEA
id request_id page_views step
-----------------------------------
1 1 0 0
2 1 0 1
3 1 0 2
4 1 0 3
5 2 0 0
6 2 0 1
7 2 1 2
8 3 0 0
9 3 0 1
10 4 0 0
11 4 0 1
12 4 0 2
TableB
id name phone
------------------------------
1 John Deere 111-222-3333
2 Sally Sue 333-222-1111
3 Jacob Clark 434-343-4343
4 Alex Smith 222-112-2112
Во-первых, должно быть объединение на столах, где tableA.request_id = tableB.id
привести к:
id request_id page_views step name phone
----------------------------------------------------------------
1 1 0 0 John Deere 111-222-3333
2 1 0 1 John Deere 111-222-3333
3 1 0 2 John Deere 111-222-3333
4 1 0 3 John Deere 111-222-3333
5 2 0 0 Sally Sue 333-222-1111
6 2 0 1 Sally Sue 333-222-1111
7 2 1 2 Sally Sue 333-222-1111
8 3 0 0 Jacob Clark 434-343-4343
9 3 0 1 Jacob Clark 434-343-4343
10 4 0 0 Alex Smith 222-112-2112
11 4 0 1 Alex Smith 222-112-2112
12 4 0 2 Alex Smith 222-112-2112
Из этой таблицы я хочу, чтобы группы возвращались, если они соответствуют условиям ниже. По группе я имею в виду группы строк, которые имеют одинаковые request_id
. Вот условия:
- Из строк в группе, ни один из них
page_views
больше 0. - Из строк в группе, ни один из них
step
больше 2.
Если какая-либо из два вышеуказанных условия не работают, вся группа не будет возвращена. Итак, вот что должно быть возвращено:
id request_id page_views step name phone
----------------------------------------------------------------
8 3 0 0 Jacob Clark 434-343-434
9 3 0 1 Jacob Clark 434-343-434
10 4 0 0 Alex Smith 222-112-2112
11 4 0 1 Alex Smith 222-112-2112
12 4 0 2 Alex Smith 222-112-2112
Группа «3» (или Джейкоб Кларк) не было ни одной строки, где page_views
больше 0, и ни одна из строк не имеют step
больше 2. То же самое с группа «4» (или Алекс Смит).
Так вот в чем проблема. Мне нужен один SQL-запрос, который будет обрабатывать все это. Первое соединение может быть подзапросом, без проблем:
SELECT sub.*
FROM (
SELECT tableA.*, tableB.name, tableB.phone
FROM `tableA`, `tableB`
WHERE tableA.`request_id` = tableB.id
) sub
После этого я не уверен.
Любая помощь будет оценена по достоинству.
Предложения 'join' могут быть такими же сложными и простыми, как вы хотите. 'join 1' является полностью действительным и просто объединяет ВСЕ записи. это действительно сводится к тому, что предложение join возвращает логическое значение true (присоединяется к рассматриваемым записям) или false (исключая записи). что это выражение, полностью зависит от вас. –