Как написать этот простой запрос MySQL JOIN? - PullRequest
1 голос
/ 25 марта 2011

Мне нужно выбрать записи из 2 таблиц, одна называется города , а другая - окрестности .Они оба имеют общий столбец таблицы с именем parent_state .В этой ячейке хранится идентификатор родительского состояния.

Мне нужно выбрать все города и районы, которые принадлежат определенному штату.Например, если идентификатор состояния равен 10, мне нужно получить все города и районы, которые имеют это значение для своей ячейки parent_state.

Идентификатор состояния хранится в переменной PHP, например:

$ parent_state = '10';

Как будет выглядеть этот запрос (желательно, чтобы объединенные результаты из обеих таблиц были отсортированы по столбцу name в алфавитном порядке)?

РЕДАКТИРОВАТЬ

Да, мне, вероятно, нужен союз.Я очень плохо знаком с mysql, и все, что я могу сейчас сделать, - это таблицы запросов по отдельности.

Я всегда могу запрашивать таблицы городов и районов по отдельности, но причина, по которой я хочу объединить результаты, заключается вединственная цель - перечислить результаты в алфавитном порядке.

Так может кто-нибудь показать, как будет выглядеть запрос UNION для этого?

Ответы [ 3 ]

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

Использование:

SELECT c.name
  FROM CITIES c
 WHERE c.parent_state = 10
UNION ALL
SELECT n.name
  FROM NEIGHBORHOODS h
 WHERE n.parent_state = 10

UNION ALL вернет набор результатов как комбинацию обоих запросов в виде одного набора результатов. UNION удалит дубликаты, и медленнее для этого - вот почему UNION ALL является лучшим выбором, даже если вряд ли будет город и район с тем же именем. Честно говоря, это не хорошая идея смешивать их, потому что окрестности - это часть города ...

Что еще нужно знать о UNION, так это то, что в предложении SELECT должно быть одинаковое количество столбцов для всех запросов, выполняемых UNION (это относится к UNION и UNION ALL). IE: вы получите ошибку, если в первом запросе есть три столбца в предложении SELECT, а во втором запросе только два.

Кроме того, типы данных должны совпадать - это означает, что не возвращать тип данных DATE / TIME в той же позиции был другой запрос, возвращающий INTEGER.

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

То, что вы хотите, это, вероятно, не соединение, а скорее union.обратите внимание, что объединение может выбирать только одинаковые столбцы из обоих выражений.

0 голосов
/ 25 марта 2011
select * from city as c
inner join neighborhoods as n
on n.parent_state = c.parent_state
where c.parent_state=10

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

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