Противостояние между столбцами

#mysql

#mysql

Вопрос:

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

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

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. Является ли 4028000003 по сути более понятным, чем, скажем, 3?

Ответ №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 s, которые участвовали одинаково 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. ОШИБКА 1054 (42S22): неизвестный столбец ‘t.id_name’ в ‘IN/ALL/ ЛЮБОМ подзапросе’

2. @Sobay: предоставленные мной запросы не могут вызвать эту ошибку (для начала нет подзапросов). Пожалуйста, выполняйте запросы точно так, как указано.

3. вот как я пишу

4. ‘ВЫБЕРИТЕ t.* ИЗ (выберите t1.id_name как id_name1, t2.id_name как id_name2, t1.comp ИЗ pturf1.cachedate КАК t1 внутреннее соединение pturf1.cachedate t2 на t2.comp = t1.comp и t2.id_name > t1.id_name ) t, ГДЕ t.id_name В (ВЫБЕРИТЕid_name ИЗ pturf1.partant);’

5. @Sobay: и почему вы не выполняете запросы так, как я их предоставил?