1

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

我有 3 张桌子:

  • 数据
  • 数据_tmp
  • 用户

data表是空的 - 有它自己的结构但没有行

数据

id | name | who
----------------

数据时间

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但找不到正确的语法。希望您能够帮助我。

卡雷格

4

2 回答 2

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 服务器@SQLFIDDLE
MYSQL@SQLFIDDLE

于 2012-07-29T11:10:26.540 回答
1

您的假设是正确的:您必须以这种方式使用左联接:

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
于 2012-07-29T10:27:23.510 回答