Мне нужна ваша помощь. Как выбрать из родительской таблицы, только если дочерняя таблица (другая таблица, которая зависит от идентификатора родительской таблицы) имеет строки в php?
Например: у меня есть таблица CATEGORY
таблица Items
. Где Category
является родительской таблицей и содержит ct_id, ct_name
, а Items
- it_id, ct_id
таблица, которая содержит it_id, ct_id
(связанная с родительской таблицей), it_name
PS: Мне не нужно выбирать элементы, но мне нужны только категории ТОЛЬКО, если есть элементы, связанные с этой таблицей.
Спасибо
Вы можете использовать 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
LEFT OUTER JOIN