Mysql: выберите из родительской таблицы, только если в дочерней таблице есть строки

0

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

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

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

Спасибо

  • 0
    это было бы LEFT OUTER JOIN
  • 0
    @smith Смит, не могли бы вы привести пример? Как это использовать?
Теги:
mysqli

1 ответ

1
Лучший ответ

Вы можете использовать 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню