выбрать имена, равные идентификатору других таблиц - SQL - PullRequest
0 голосов
/ 05 мая 2018

У меня есть две таблицы продуктов и категорий. Для продуктов у меня есть поля ff:

  • ID
  • PNAME
  • category_id
  • дата

А для удостоверения личности категрии у меня есть:

  • ID
  • имя

Таким образом, используя внутреннее объединение, я пытаюсь выбрать все имена категорий, которые равны category_id внутри таблицы продуктов.

Вот мой дубль:

SELECT
    c.name
FROM
    categories AS c
    INNER JOIN products AS p ON c.id = p.category_id

Однако этот не сработал, и он просто посылает мне пустой массив.

Есть идеи, как я могу это сделать? спасибо!

1 Ответ

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

Если вам просто нужны названия категорий, тогда exists или in более подходит, чем join:

SELECT c.name
FROM categories c
WHERE EXISTS (SELECT 1 FROM products p WHERE c.id = p.category_id);

Вам не придется беспокоиться об удалении дубликатов, если две категории не имеют одинакового имени.

Это также намного эффективнее, чем использование SELECT DISTINCT в вашем запросе, особенно если products имеет индекс, где category_id - первый ключ.

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