Несколько соединений с условием - PullRequest
1 голос
/ 12 марта 2020

У меня есть следующая схема

CREATE TABLE IF NOT EXISTS `params` (
  `id` int(6) unsigned NOT NULL,
  `parameter` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `entry` (
  `id` int(6) unsigned NOT NULL,
  `param_id` int(6) unsigned NOT NULL,
  `value` int(6) unsigned NOT NULL,
  `access_id` int(6) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `enabled` (
  `id` int(6) unsigned NOT NULL,
  `param_id` int(6) unsigned NOT NULL,

  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

INSERT INTO `params` (`id`, `parameter`) VALUES
  ('1','Height'),
  ('2', 'Weight'),
  ('3', 'Texture'),
  ('4', 'Colour');
 INSERT INTO `entry` (`id`, `param_id`,`value`,`access_id`) VALUES
  ('1','1','5.2','1'),
  ('2','2','80','2'),
  ('3','1','6','2');


 INSERT INTO `enabled` (`id`, `param_id`) VALUES
  ('1','1'),('2','2');

Я пытаюсь получить все значения параметров с access_id из 1 из таблицы entry ИЛИ Все параметры, которые enabled, (НЕ существует в таблице entry с access_id из 1)

Таким образом, вывод должен быть

id  parameter   value   access_id
1   Height        5      1
2   Weight       NULL    NULL

Вторая запись здесь имеет значение null, потому что хотя она enabled, она не имеет access_id из 1 в таблице entry Схема здесь http://sqlfiddle.com/#! 9/103016

1 Ответ

0 голосов
/ 12 марта 2020
select p.*, e.value, e.access_id from params p
inner join entry e on p.id= e.param_id and e.access_id = 1
union 
select p.*, null,null from params p
inner join enabled enb on p.id=enb.param_id
where enb.param_id not in (select param_id from entry where access_id = 1) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...