MySQL запрос соединения не работает, но sql "где" работает - PullRequest
0 голосов
/ 24 октября 2011

я пытаюсь выполнить запрос на присоединение к mysql. Я использую следующий запрос:

SELECT `Reservation`.`id`
FROM `reservations` AS `Reservation` 
LEFT JOIN rates ON Reservation.postal_code=rates.postal_code

это дает мои результаты только для таблицы "Резервирование" и никаких результатов для таблицы "ставки" вообще, но следующий запрос работает нормально

SELECT `Reservation`.`id`, rates.id 
FROM `reservations` AS `Reservation`, rates 
WHERE Reservation.postal_code = rates.postal_code

Я не уверен, что я делаю не так, может кто-нибудь, пожалуйста, помогите?

edit

Iиспользовала cakephp, и это всего лишь измененная версия запроса, сгенерированного cakephp, и он не указывал поля в случае "select", поэтому я подумал, что в этом нет необходимости.

Ответы [ 3 ]

4 голосов
/ 24 октября 2011

Вы должны включить их в SELECT

SELECT `Reservation`.`id`, rates.* 
FROM `reservations` AS `Reservation` 
LEFT JOIN rates ON Reservation.postal_code=rates.postal_code

Во втором запросе у вас есть rate.id, который включает его.

ПРИМЕЧАНИЕ: Не используйте вид соединения из второго запроса, который вы нам показали.Это перекрестное соединение (тета-соединение), которое сделает ваш запрос очень медленным.Всегда используйте JOINS.

0 голосов
/ 24 октября 2011

Первый запрос не выбирается из таблицы тарифов.Попробуйте это:

SELECT `Reservation`.`id`, `rates`.`id` 
FROM `reservations` AS `Reservation` 
LEFT JOIN rates ON Reservation.postal_code=rates.postal_code
0 голосов
/ 24 октября 2011

Первый запрос возвращает только один столбец, id, из резервирований.Ожидаете ли вы также увидеть данные по ставкам?Вы должны упомянуть эти столбцы после ключевого слова SELECT.

. Второй запрос включает в себя столбец id из ставок.

Если вы измените запросы так, чтобы они возвращали тот же список столбцов, которые онибудет производить аналогичные (но не идентичные результаты).Они по-прежнему будут отличаться тем, что второй запрос может вернуть меньше строк - он не будет включать резервирования с 0 соответствующими скоростями (потому что он использует INNER JOIN).

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