| 1 | Master |
| 2 | 2 | Slave |
| 3 | 3 | Dude |
| 4 | 4 | Killer |
| 5 | 5 | Master |
| 6 | 5 | Dude |
| 7 | 6 | Slave |
| 8 | 3 | Master |
+----+---------+----------+
Affected rows: 8
Query result:
+----+---------+-----+
| Id | Name | Old |
+----+---------+-----+
| 1 | Tom | 12 |
| 2 | Lucy | 99 |
| 3 | Frank | 20 |
| 4 | Jane | 99 |
| 5 | Robert | 1 |
| 6 | Session | 20 |
+----+---------+-----+
Affected rows: 6
Query result:
+---------+-----+--------------------------+
| Name | Old | GROUP_CONCAT(s.position) |
+---------+-----+--------------------------+
| Jane | 99 | Killer |
| Lucy | 99 | Slave |
| Frank | 20 | Master,Dude |
| Session | 20 | Slave |
| Robert | 1 | Dude,Master |
+---------+-----+--------------------------+
Affected rows: 5
Есть две таблички, я их джойню, необходимо выбрать имя, возраст и роль всех одногодок.
SELECT n.Name, n.Old, GROUP_CONCAT(s.position)
FROM NAMES n
LEFT JOIN STATS s
ON n.Id = s.name_id
GROUP BY n.Name, n.Old
HAVING n.Old IN (
SELECT names.Old
FROM NAMES names
LEFT JOIN STATS stats
ON names.Id = stats.name_id
GROUP BY names.Old
HAVING COUNT(names.Old) > 1
)
ORDER BY n.Old DESC;
Но у меня выходит нечто громоздкое + если один и тот же человек встречается дважды - он становится одногодкой с самим собой.
Есть ли способ решить задачу, используя всего один селект? Предполагаю, копать надо в сторону селфджойна уже сделанного джойна?
SELECT * JOIN выглядит следующим образом
Query result:
+----+---------+-----+----+---------+----------+
| Id | Name | Old | Id | name_id | position |
+----+---------+-----+----+---------+----------+
| 1 | Tom | 12 | 1 | 1 | Master |
| 2 | Lucy | 99 | 2 | 2 | Slave |
| 3 | Frank | 20 | 8 | 3 | Master |
| 3 | Frank | 20 | 3 | 3 | Dude |
| 4 | Jane | 99 | 4 | 4 | Killer |
| 5 | Robert | 1 | 6 | 5 | Dude |
| 5 | Robert | 1 | 5 | 5 | Master |
| 6 | Session | 20 | 7 | 6 | Slave |
+----+---------+-----+----+---------+----------+
Affected rows: 8
Select * from table as a Inner join table as b on b.old = a.old and b.id != a.id Должен получить одногодок. Остальные таблицы, наверное, получится самостоятельно добавить.
А можно таблицы с данными на SQLize.online запостить?
https://sqlize.online/sql/mysql57/1c186b659a2b6fab95be600b6b6f7ee9/
Ой, я отходил, прошу прощения, не дал наполнение таблиц. Спасибо за решения, я их внимательно исследую ❤️
офигенно, спасибо большое
Обсуждают сегодня