SQL Выберите из двух таблиц, получите нулевые значения для столбцов, если предложение WHERE имеет значение false - PullRequest
0 голосов
/ 12 июня 2018

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'

Спасибо, Лукаш Шозда и Йогеш Шарма, за ваш ответ, перевод условия в положение ВКЛ делает то, что я хотел

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Переходите к предложению ON вместо использования предложения where:

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

Вы * Предложение 1006 * превращается в inner join, что является проблемой.

0 голосов
/ 12 июня 2018

Вы можете переместить условие в ON:

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

SQLFiddle Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...