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

标签 mysql syntax left-join

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

我有 3 个表:

  • 数据
  • 数据_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 但找不到正确的语法。希望你能帮助我。

卡雷格

最佳答案

试一试(不使用子查询)

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

关于MySQL - 选择 3 个具有正确左连接语法的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708464/

相关文章:

mysql - 删除至少一个为空的多个表

PHP 合并数组,因此两个集合的数据都是连续的 $a[0] $b[0] $a[1] $b[1]

javascript - 我怎样才能解构这个数组?

python - 分配给 "_ "的原因

MySQL根据最低单元格值连接表行

mysql - 连接 3 个返回混合结果的表(mysql)

用于批量传输的 MySqlDataAdapter 或 MySqlDataReader?

MySQL:从表中删除除 20 行以外的所有行?

php - r($me->id) 中的 r 是什么

c++ - Visual Studio .cu 文件显示语法错误但编译成功