SQL从两个表中选择,如果WHERE子句为false,则为列获取空值

时间:2018-06-12 19:21:26

标签: mysql sql

http://sqlfiddle.com/#!9/cfd41ef/1

我想从表 person 获取每一行,如果WHERE为false,我想得到空值。有没有办法做到这一点?提前谢谢。

CREATE TABLE `pet` (
    `owner_id` INT(11) NULL DEFAULT NULL,
    `pet_type` ENUM('DOG','CAT') NULL DEFAULT NULL,
    `pet_name` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

CREATE TABLE `person` (
    `id` INT(11) NULL DEFAULT NULL,
    `first_name` VARCHAR(50) NULL DEFAULT NULL,
    `last_name` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

INSERT INTO `person` (`id`, `first_name`, `last_name`) VALUES
    (1, 'qwe', 'asd'),
    (2, 'asd', 'fgh'),
    (3, 'zxc', 'vbn');

INSERT INTO `pet` (`owner_id`, `pet_type`, `pet_name`) VALUES
    (1, 'DOG', 'rex');

SELECT person.*, pet.pet_name FROM person LEFT JOIN pet ON person.id = pet.owner_id WHERE pet.pet_type = 'DOG'

谢谢Lukasz Szozda和Yogesh Sharma的回答将条件转移到ON做了我想要的事情

2 个答案:

答案 0 :(得分:4)

您可以将条件移至ON

SELECT person.*, pet.pet_name 
FROM person 
LEFT JOIN pet 
  ON person.id = pet.owner_id
 AND pet.pet_type = 'DOG';

<强> SQLFiddle Demo

答案 1 :(得分:4)

转到ON子句,而不是使用where子句:

SELECT person.*, pet.pet_name 
FROM person LEFT JOIN 
     pet 
     ON person.id = pet.owner_id and pet.pet_type = 'DOG';

where子句变成inner join这就是问题所在。