MySQL - 选择具有正确左连接语法的3个表

时间:2012-07-29 10:22:03

标签: mysql syntax left-join

希望您能帮助我正确处理SQL查询的语法(使用MySQL 5.5.25)。

我有3张桌子:

  • 数据
  • data_tmp
  • 用户

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

2 个答案:

答案 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

这适用于不同的服务器:

MSSQL SERVER @ SQLFIDDLE
MYSQL @ SQLFIDDLE

答案 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