MySQL Join Query - PullRequest
       10

MySQL Join Query

0 голосов
/ 23 июля 2010

Мне нужно запросить базу данных, соединив две таблицы.Вот что у меня есть:

Таблица города:

  • id
  • имя
  • регион

Таблица поставщиков:

  • id
  • name
  • town_id

В настоящее время у меня есть следующий запрос, который выводит все города, принадлежащие данномурегион:

SELECT id, name FROM Town WHERE region = 'North West';

Теперь мне нужно расширить этот запрос и создать еще два запроса следующим образом:

  • Вывести количество поставщиков для каждого города

  • Вывод только тех городов, в которых есть 1 или более поставщиков

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

РЕДАКТИРОВАТЬ (27/07/10):

Теперь мне нужно расширить этот последний раз - есть еще одна таблица с именем Supplier_vehicles:

  • id
  • supplier_id
  • vehicle_id

У поставщика может быть много поставщиков.Счетчик (в данном случае NumSupplier) должен содержать общее количество поставщиков в данном городе, у которых есть любой из указанных vehicle_id (условие IN):

SELECT * FROM Supplier s, Supplier_vehicles v WHERE s.id = v.supplier_id AND v.vehicle_id IN (1, 4, 6)

Необходимо интегрировать вышеуказанный запрос всуществующий запрос JOIN.

Ответы [ 2 ]

4 голосов
/ 23 июля 2010

Подсчитайте количество поставщиков.

SELECT t.id, t.name, count(s.id) as NumSupplier
FROM Town t
LEFT OUTER JOIN Suppliers s ON s.town_id = t.id
GROUP BY t.id, t.name

Только в городах, где есть хотя бы один поставщик

SELECT DISTINCT t.id, t.name
FROM Town t
INNER JOIN Suppliers s ON s.town_id = t.id

И вы на 100% правы, лучшее место для этого - SQL-запрос.

0 голосов
/ 23 июля 2010
SELECT t.id, t.name, count(s.id) as NumSupplier
FROM Town t
LEFT JOIN Suppliers s
[WHERE NumSupplier > 1]
GROUP BY t.id
...