Это выдержка из моей таблицы.

Как написать запрос, чтобы узнать, включил ли человек A уже человека B в ту же подборку

Comp = ссылка на соревнование

+------------+--------+--------+------------------+-----+
| id         | comp   |id_name | name             | cl  |
+------------+--------+--------+------------------+-----+
| 4028000001 | 200000 | 445895 | Uhéliad Créiomin | 6e  |
| 4028000002 | 200000 | 445869 | Una II           | 2e  |
| 4028000003 | 200000 | 445872 | Ultracott        | 5e  |
| 4028000004 | 200000 | 449402 | Une Amie         | 3e  |
| 4028000005 | 200000 | 451463 | Uhelwad Creiomin | 1er |
| 4028000006 | 200000 | 449400 | Une de Boizel    | 7e  |
| 4028000007 | 200000 | 452511 | Uranie du Houx   | 8e  |
| 4028000008 | 200000 | 473479 | Urbain du Bois   | 4e  |
| 4068682801 | 202020 | 447452 | Trésor de Fercé  | 3e  |
| 4068682802 | 202020 | 455022 | Ski de Baune     | 4e  |
+------------+--------+--------+------------------+-----+

Этот запрос, который я написал, но он был неправильным

SELECT t.*
FROM   (
SELECT a.id_name, a.comp, a.name, a.cl 
      FROM pturf1.cachedate AS  a
      Left join pturf1.cachedate AS b on a.comp=b.comp
      WHERE a.comp = b.comp
      ) t 
WHERE t.idChe IN (SELECT idChe FROM pturf1.partant);
-1
Sobay 18 Ноя 2020 в 01:23

1 ответ

Лучший ответ

Я думаю, вы хотите присоединиться к себе:

select distinct t1.id_name as id_name1, t2.id_name as id_name2
from mytable t1
inner join mytable t2 on t2.comp = t1.comp and t2.id_name > t1.id_name

Это приносит кортежи id_name, которые участвовали в одном comp хотя бы один раз. Условие неравенства гарантирует, что никакие «зеркальные» записи не будут отображаться в наборе результатов.

Если вы хотите также отобразить comp, тогда:

select t1.id_name as id_name1, t2.id_name as id_name2, t1.comp
from mytable t1
inner join mytable t2 on t2.comp = t1.comp and t2.id_name > t1.id_name
1
GMB 17 Ноя 2020 в 22:24