Выборка из двух таблиц в MySQL по запросу

265
23 апреля 2022, 01:00

Нужна помощь c MySQL. Есть 2 таблицы

spisok (id, name, id_kat);
kat (id, name, rod);

где id_kat = id(второй таблицы) rod - содержит в себе id записи из второй таблицы и показывает id родительской записи этой же таблицы. Если он сам является род. записью, то там rod=0. Чтобы было белее понятно, пример.

Таблица spisok 
id name id_kat
1  Вася 1
2  Петя 4
3  Петя 2
4  Петя 3
Таблица kat
id name rod
1  ххх  0
2  yyy  0
3  zzz  1
4  ccc  1
  1. Нужно сделать выборку из таблицы spisok всех записей у которых rod=1 в таблице kat
  2. Нужно сделать выборку из таблицы spisok всех записей у которых rod=1 в таблице kat и id=1 Заранее благодарен.
Answer 1

Используйте конструкцию LEFT JOIN ON.

1 выборка делается так

SELECT * FROM spisok LEFT JOIN kat ON kat.id = spisok.id_kat WHERE kat.rod = 1;

естественно вместо * можно возвращать например spisok.name, kat.name для получения более удобочитаемого вывода.

А вот насчет 2 выборки я вообще не понял логики, единственно что пришло на ум, это добавить условие на id из таблицы spisok, так?

SELECT * FROM spisok LEFT JOIN kat ON kat.id = spisok.id_kat WHERE kat.rod = 1 AND spisok.id = 1;

С точки зрения оптимизации это может не самый правильный запрос, возможно вот этот более правильный, с конструкцией INNER JOIN:

SELECT * FROM spisok INNER JOIN kat ON kat.rod=1 AND kat.id = spisok.id_kat
READ ALSO
Неверные данные на выходе при запросе select(exists....)

Неверные данные на выходе при запросе select(exists....)

Что мешает грамотному чтению данных?

211
Запрос MYSQL используя 3 таблицы

Запрос MYSQL используя 3 таблицы

Имеется 3 таблицыХочу сделать выборку и подсчёт данных

101
Что такое лимит 1000 строк в БД

Что такое лимит 1000 строк в БД

Я не могу понять, что такое лимит 1000 строк в БД это у меня будет в HeidiSql видно 1000 строк или как, или если количество пользователей перевалит...

174