MySQL ЛЕВОЕ ПРИСОЕДИНЕНИЕ?

У меня есть таблица cars(id, name), содержащая 20 строк. Другая таблица carLog(username, car, count) содержит строки, в которых подсчитываются автомобили, купленные игроком (если строки нет, если он не купил машину).

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

SELECT * FROM cars LEFT JOIN carLog ON cars.id=carLog.car

Это возвращает сотни строк, я хочу, чтобы он возвращал 20 строк (по одной для каждой машины) и дополнительную информацию в строке, если имя пользователя купило машину:

WHERE carLog.username='Juddling'

Я понятия не имею, должен ли я использовать GROUP BY, WHERE или другой тип соединения!


person Juddling    schedule 15.09.2012    source источник
comment
В MS SQL вы можете сделать топ-20 в MySQL, я думаю, это предел?   -  person Grixxly    schedule 15.09.2012


Ответы (2)


Переместите условие имени пользователя из предложения WHERE в предложение ON.

SELECT *
FROM cars
LEFT JOIN carLog
  ON cars.id=carLog.car
     AND carLog.username='Juddling'

Предложение WHERE применяется, когда JOIN уже завершен. Это означает, что будут отброшены NULL-строки, добавленные ЛЕВЫМ СОЕДИНЕНИЕМ.

person Oswald    schedule 15.09.2012

Поскольку вы ограничиваете таблицу внешним соединением, вы должны поместить условие в on, а не в where:

select * from cars
left join carLog on cars.id = carLog.car and carlog.username = 'Juddling'
person Guffa    schedule 15.09.2012