0

我有一个cars(id, name)包含 20 行的表。另一个表carLog(username, car, count)包含计算玩家购买的汽车的行(如果他们没有购买汽车,则没有行)

我希望我的查询返回所有 20 辆车以及额外的连接信息,如果它们在carLog表中有一行但我无法让它工作。

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

这将返回数百行,我希望它返回 20 行(每辆车一个),如果用户名购买了汽车,则该行中的额外信息:

WHERE carLog.username='Juddling'

我不知道我是否打算使用 GROUP BY、WHERE 或其他类型的连接!

4

2 回答 2

6

将用户名条件从WHERE子句移动到ON子句。

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

当 JOIN 已经完成时,应用 WHERE 子句。这意味着,它将丢弃 LEFT JOIN 添加的 NULL 行。

于 2012-09-15T15:02:59.770 回答
1

当您从外部连接限制表时,您必须将条件放在 中on,而不是where

select * from cars
left join carLog on cars.id = carLog.car and carlog.username = 'Juddling'
于 2012-09-15T15:02:02.610 回答