#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: и почему вы не выполняете запросы так, как я их предоставил?