Как объединить две таблицы вместе в SQL? - PullRequest
1 голос
/ 27 марта 2011

У меня есть две таблицы. Таблица имен имеет внешний ключ с именем «категории». Другая таблица - это «категории», которая содержит названия категорий. Таблица имен ссылается на категорию в таблице категорий.

Так что я использую это:

$categories = "SELECT name, COUNT(*) category";
$number_of_categories = "SELECT category, COUNT(1) FROM name GROUP BY category";

Как видите, я делаю два оператора select. Я слышал, что объединение таблиц может творить чудеса, пожалуйста, научите меня, как сделать это в одном операторе SELECT.

По сути, я хочу ВЫБРАТЬ все строки из таблицы категорий, а затем подсчитать количество экземпляров каждой категории в таблице имен.

Ответы [ 4 ]

3 голосов
/ 27 марта 2011
SELECT c.name, COUNT(n.category) AS count_in_name_table
FROM categories c
LEFT JOIN name n ON n.category = c.name
GROUP BY c.name
1 голос
/ 27 марта 2011

Предполагая, что именем таблицы категорий является «Категория» (с именами категорий и категорий) и именем таблицы имен является «Имя» (с именами имен и категорий):

SELECT C.category_name, COUNT(N.name_id) FROM Category C 
LEFT JOIN Name N ON C.category_id=N.category_id
GROUP BY C.category_name

Группировкапозволяет подсчитать все записи имени по названию категории.

1 голос
/ 27 марта 2011

Вы можете посчитать количество имен в подзапросе:

select  category.name
,       (
        select  count(*)
        from    category
        ) as CategoryCount
,       (
        select  count(*)
        from    name
        where   name.category = category.name
        ) as NameCount
from    category
0 голосов
/ 27 марта 2011

Возможно, у вас плохой дизайн.

  • Таблица имен имеет внешний ключ 'category'.
  • Таблица категорий содержит имена категорий.
  • Таблица имен ссылается на категорию в таблице категорий.

Делать обе таблицыссылаться друг на друга?Или это просто результат общих имен «имя» и «категория»?

Если у вас есть отношение 1:1, это означает, что у каждой категории есть имя, а у каждого имени категория, вы бы поместили их в одну таблицу.

Если у вас есть отношение 1:n, одна категория связана с несколькими именами, это отношение будет указано в таблице категорий.Если это отношения n:1, наоборот.

Полагаю, нам нужны образцы данных или дополнительные пояснения, чтобы оказать реальную помощь.

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