У меня есть вид таблицы T как:
id | C1 | C2 |
---+------+-----+
1 | pat | 190 |
1 | pat1 | 191 |
1 | A5 | 302 |
2 | pet | 190 |
2 | pet1 | 191 |
2 | A5 | 302 |
3 | pit | 190 |
3 | pit1 | 191 |
3 | A6 | 302 |
Хотел бы получить:
id | C1 | C2 |
---+------+-----+
1 | pat | 190 |
2 | pet | 190 |
Другими словами, вернуть id, где C2 = 190, где в другом месте таблицы указано A5.
Пробовал несколько подходов LEFT JOIN, но никуда не попал. Пожалуйста помоги. Thanx .
0
John Miller
28 Май 2019 в 14:14
2 ответа
Лучший ответ
Вы должны существовать:
select t.*
from tablename t
where c2 = 190
and exists (
select 1 from tablename where id = t.id and c1 = 'A5'
)
См. демонстрационную версию.
Полученные результаты:
| id | C1 | C2 |
| --- | --- | --- |
| 1 | pat | 190 |
| 2 | pet | 190 |
2
forpas
28 Май 2019 в 11:29
Вы можете использовать EXISTS
, чтобы проверить, существует ли строка с c1 = 'A5'
для идентификатора.
SELECT *
FROM t t1
WHERE t1.c2 = 190
AND EXISTS (SELECT *
FROM t t2
WHERE t2.id = t1.id
AND t2.c1 = 'A5');
0
sticky bit
28 Май 2019 в 11:29
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.