Mysql: выберите из родительской таблицы, только если в дочерней таблице есть строки - PullRequest
0 голосов
/ 29 мая 2018

Мне нужна ваша помощь. Как выбрать из родительской таблицы, только если дочерняя таблица (другая таблица, которая зависит от идентификатора родительской таблицы) имеет строки в php?

Например: у меня есть CATEGORY стол и Items стол.Где Category является родительской таблицей и содержит ct_id, ct_name, тогда как Items является дочерней таблицей, которая содержит it_id, ct_id (связана с родительской таблицей), it_name

PS: я неНе нужно выбирать элементы, но мне нужны ТОЛЬКО категории, если есть элементы, связанные с этой таблицей.

Спасибо

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете использовать INNER JOIN, который возвращает записи только в случае совпадения в обеих таблицах.

SELECT DISTINCT a.* FROM Categories a INNER JOIN Items b on b.ct_id = a.ct_id

Но более эффективно запускать подзапрос:

SELECT *
FROM Categories 
WHERE ct_id IN (SELECT ct_id FROM Items);

Это связано с тем, что в первом примере сначала нужно сопоставить всю таблицу, а затем удалить все дубликаты.используя ключевое слово DISTINCT.Второй пример позволяет избежать дублирования, сначала сканируя дочернюю таблицу.

Это известно как Semi Join.Подробнее здесь: https://dev.mysql.com/doc/refman/5.6/en/semi-joins.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...