希望您能帮助我正确处理SQL查询的语法(使用MySQL 5.5.25)。
我有3张桌子:
data
表为空 - 具有自己的结构但没有行
数据:
id | name | who
----------------
data_tmp :
id | cars | who
---------------
1 | lambo| 2
用户
who | name |
------------
2 | john
我的查询是:
SELECT DISTINCT
users.name,
(SELECT count(id) FROM data WHERE who = 1) as number,
data_tmp.cars
FROM
users, data, data_tmp
WHERE
users.who = 2
AND data_tmp.who = 2
AND data.who = 2
这当然会返回一个空结果(没有适合所有参数的行,因为data
为空)。
我想要达到的目标是:
users.name | number | data_tmp.cars |
-------------------------------------
john | 0 | lambo |
我确信我必须 - 以某种方式 - 使用LEFT JOIN
但无法找到正确的语法。希望你能帮帮我。
Kalreg
答案 0 :(得分:2)
尝试一下(不使用子查询)
SELECT a.name, b.cars, count(c.id) as number
FROM users a
INNER JOIN data_tmp b
on a.who = b.who
LEFT JOIN data c
on a.who = c.who AND
a.name = c.name
WHERE a.who = 2
GROUP BY a.name, b.cars
这适用于不同的服务器:
答案 1 :(得分:1)
你的假设是对的:你必须以这种方式使用左JOIN:
SELECT DISTINCT users.name, (SELECT count(id) FROM data WHERE who = 1) as number, data_tmp.cars
FROM users
JOIN data_tmp USING (who)
LEFT JOIN data USING(who)
WHERE users.who = 2