У меня есть такая таблица:
--------------------------------------------
| category table |
--------------------------------------------
id | name |
--------------------------------------------
1 | book | --->1 digit is a category
11 | aa | --->2 digit is a sub category
2 | software|
21 | ba |
22 | bb |
23 | bc |
Я хочу, чтобы вывод был таким:
---------------------------------
sub_id |name_sub |name_category
---------------------------------
11 |aa |book
21 |ba |software
22 |bb |software
23 |bc |software
выберите все субидентификаторы (2 цифры), имена субидентификаторов и название категории (1 цифра слева)
Я скопировал модель базы данных из этого github.com/Rizki36/вилая
Вы можете использовать correlated subquery
select id,
name as name_sub,
( select substring(name,1,1) from tab where id=t.id )
as name_category
from tab t
where length(name)=2
можно ли разделить название таблицы (вкладка t)?
@RizkiFitra да, это псевдоним, который представляет таблицу.
@RizkiFitra не проблема :)
Судя по вашим примерам данных, это может быть приемлемым ярлыком:
SELECT id sub_id, name name_sub, LEFT(name, 1) name_category
FROM category
WHERE CHAR_LENGTH(id) = 2
В противном случае вы также можете использовать JOIN:
SELECT c1.id sub_id, c1.name name_sub, c2.name name_category
FROM category c1
INNER JOIN category c2 ON c2.id = LEFT(c1.id, 1)
WHERE CHAR_LENGTH(c1.id) = 2
Как Wiimm
уже упоминалось в комментариях, это кажется мне очень бессмысленным по очевидным причинам, но если ваши категории останутся двухзначными идентификаторами, а родитель всегда будет иметь одну цифру, нижеприведенный запрос будет работать с использованием простой математической операции деления.
select c1.id as sub_id,c1.name as name_sub ,c2.name as name_category
from category c1
inner join category c2
on cast((c1.id / 10) as UNSIGNED) = c2.id
Демо:https://www.db-fiddle.com/f/qmbYDxpDLvnzUDZ9AU4kTH/0
этот код хорошо работает в моем браузере, но ошибка в моем проекте
вывод неверный, функция номер 10 для чего?(c1.id/10)
@RizkiFitra Какой результат вы получаете? Это отлично работает в демо, которое я приложил.
Да, это работает хорошо, но мне нужно только использовать самосоединение, спасибо
В общем, это неправильно сформированная таблица. Если вы хотите различать категорию и подкатегорию, определите 2 столбца. Это значительно облегчит жизнь будущим расширениям (а они появятся).