如果外键列具有NULL值,则MySQL不选择行

时间:2018-06-14 07:28:13

标签: mysql

以下SQL有效,但如果某行'str' object is not callabletransfers.driver,则不会选择该行。为NULL添加值后,将选择该行。即使driverdriver,我该如何选择行?

NULL

这是表格的结构:

SELECT 
    transfers.id, 
    transfers.name AS name, 
    transfers.pickup_time AS pickup_time, 
    transfers.voucher AS voucher, 
    transfer_types.name AS type, 
    drivers.name AS driver 
FROM
    transfers 
INNER JOIN transfer_types ON transfer_types.id = transfers.type 
INNER JOIN drivers ON drivers.id = transfers.driver

这是外键:

CREATE TABLE `transfers` (
  `id` int(10) UNSIGNED NOT NULL,
  `voucher` varchar(24) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `type` int(10) UNSIGNED DEFAULT NULL,
  `pickup_time` time DEFAULT NULL,
  `name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `driver` int(10) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

1 个答案:

答案 0 :(得分:3)

使用left join代替inner join

SELECT 
    transfers.id, 
    transfers.name AS name, 
    transfers.pickup_time AS pickup_time, 
    transfers.voucher AS voucher, 
    transfer_types.name AS type, 
    drivers.name AS driver 
FROM
    transfers 
LEFT JOIN transfer_types ON transfer_types.id = transfers.type 
LEFT JOIN drivers ON drivers.id = transfers.driver