Группировать, если все результаты поля верны - PullRequest
0 голосов
/ 05 мая 2019

У меня есть этот запрос:

SELECT
    tbl_ord.ord.table,
    tbl_ord.ord.n_ord,
    player.confirm
FROM 
    tbl_ord
INNER JOIN 
    tbl_players ON tbl_ord.player_id = tbl_players.player_ids
WHERE 
    id_shop = 3
ORDER BY 
    n_ord ASC

результат:

+-----------+-------+---------+
| ord_table | n_ord | confirm |
+-----------+-------+---------+
|        10 |     2 |       1 |
|        10 |     2 |       0 |
|         8 |     3 |       1 |
|         8 |     3 |       1 |
|         4 |     5 |       1 |
|         4 |     5 |       1 |
+-----------+-------+---------+

Я хочу получить только результат со всеми подтвержденными пользователями по группам на ord_table

+-----------+-------+---------+
| ord_table | n_ord | confirm |
+-----------+-------+---------+
|         4 |     5 |       1 |
|         8 |     3 |       1 |
+-----------+-------+---------+

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Вы, вероятно, можете использовать not exists:

SELECT o.ord_table, o.ord.n_ord,
       1 as confirm
FROM tbl_ord o
WHERE NOT EXISTS (SELECT 1
                  FROM tbl_players p 
                  WHERE o.player_id = p.player_ids AND
                        ?.id_shop = 3 AND  -- not sure what table this comes from
                        p.confirm = 0
                 )   
ORDER BY o.n_ord ASC;

Преимущество этого подхода состоит в том, что он избегает агрегирования на внешнем уровне. Это, в свою очередь, означает, что он может лучше использовать индексы, включая использование индекса, чтобы потенциально избежать сортировки.

0 голосов
/ 05 мая 2019

Использование HAVING:

SELECT
  tbl_ord.ord.table,
  tbl_ord.ord.n_ord,
  MIN(player.confirm)
FROM tbl_ord
INNER JOIN tbl_players ON tbl_ord.player_id = tbl_players.player_ids
WHERE id_shop = 3
GROUP BY tbl_ord.ord.table, tbl_ord.ord.n_ord,
HAVING MIN(player.confirm) = 1
ORDER BY n_ord ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...