来自多个 id 匹配的表的 Mysql 结果不出现

标签 mysql sql

您好,我有一个包含 5 个表的数据库: 用户, 驱动器, 客户, 司机, 车辆。

我正在尝试获取所有驱动器及其相应的车辆驱动程序和客户端。 我提出了以下查询:

SELECT drives.id,
drives.driver AS driver_id,
CONCAT(LEFT(drivers.name, 1), '. ', drivers.surname) AS driver_name,
drives.client AS client_id,
CONCAT(LEFT(clients.name, 1), '. ', clients.surname) AS client_name,
drives.vehicle AS vehicle_id,
vehicles.license_plates AS license_plates,
drives.departure,
drives.destination,
drives.distance,
drives.type,
drives.payment_type,
drives.timestamp,
drives.total,
drives.expenses,
drives.profit,
CASE
    WHEN DATE(drives.timestamp) < DATE(NOW()) AND drives.total > 0 THEN 'Completed'
    WHEN DATE(drives.timestamp) < DATE(NOW()) AND drives.total = 0 THEN 'Overdue'
    WHEN DATE(drives.timestamp) >= DATE(NOW()) THEN
        CASE
            WHEN drives.total = 0 THEN 'Pending'
            WHEN drives.total > 0 THEN 'Prepaid'
        END     
END AS payment_status,
DATE_FORMAT(drives.timestamp, '%d-%m-%Y %H:%i:%s') AS 'stamp'
FROM drives, clients, drivers, vehicles WHERE 
drives.driver = drivers.id AND
drives.client = clients.id AND
drives.vehicle = vehicles.id AND
drives.user = '146' ORDER BY id ASC LIMIT 9999999999 OFFSET 0

一切工作正常,但是如果我从车辆表中删除车辆记录,然后尝试从表驱动器中获取所有驱动器记录,则具有drives.vehicle=vehicle.id(不再存在)的驱动器记录将不会打印出来。

如你所知,这不是我想要的。我希望即使车辆、客户、司机被删除,所有的驾驶记录也能被打印出来。

驱动器表数据示例:

id  timestamp               user    driver  client  vehicle departure   destination distance    type        payment_type    total   expenses    profit  note
1   2013-02-14 10:33:26     146     1       1       1       Address 1   Address 2   0           Deprature   Cash            0       0           0       hello world

最佳答案

您当前正在使用 INNER JOIN,请考虑使用 OUTER JOIN

...
FROM drives 
LEFT OUTER JOIN clients ON drives.client = clients.id
LEFT OUTER JOIN drivers  ON drives.driver = drivers.id
LEFT OUTER JOIN vehicles ON drives.vehicle = vehicles.id
WHERE
.... 

关于来自多个 id 匹配的表的 Mysql 结果不出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21113854/

相关文章:

mysql - NOsql 与 Mysql - 使用 Cassandra 实现无模式

mysql - dbi 将 undef 视为空,但查询在 mysql 中产生结果

sql - SQL Server中如何实现多重关系?

mysql - 分组和排序与用户的对话消息

sql - select 语句中的动态表名

sql - 同一张表的同一列上的 2 个 PostgreSQL 索引 - 多余?

php - 我如何使用 no 中的行数。获取数据?

php - PDO 检索从中找到数据的列名称

mysql - 根据同一个表中的值更新 Mysql 表

mysql - 如何使用 Mysql rand() 结果两次?