@stanced

Как сделать два JOIN и вывести результат, даже когда по второму JOIN нет совпадений?

Привет! Как сделать два JOIN и вывести результат, даже когда по второму JOIN нет совпадений?

Пример базы:
-- BEGIN TABLE code
DROP TABLE IF EXISTS code;
CREATE TABLE `code` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(100) DEFAULT NULL,
  `code_info` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
 
-- Inserting 3 rows into code
-- Insert batch #1
INSERT INTO code (id, code, code_info) VALUES
(1, 'BS', 'BS INFO'),
(2, 'FB', 'FB INFO'),
(3, 'GF', 'GF INFO');
 
-- END TABLE code
 
-- BEGIN TABLE desk
DROP TABLE IF EXISTS desk;
CREATE TABLE `desk` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;
 
-- Inserting 4 rows into desk
-- Insert batch #1
INSERT INTO desk (id, description) VALUES
(1, 'Hand game'),
(2, 'Leg game'),
(3, 'Hand game'),
(4, 'Gockey stick game');
 
-- END TABLE desk
 
-- BEGIN TABLE games
DROP TABLE IF EXISTS games;
CREATE TABLE `games` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `game` varchar(100) DEFAULT NULL,
  `code` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;
 
-- Inserting 4 rows into games
-- Insert batch #1
INSERT INTO games (id, game, code) VALUES
(1, 'Baseball', 'BS'),
(2, 'Football', 'FB'),
(3, 'Tennis', NULL),
(4, 'Golf', 'GF');
 
-- END TABLE games


В реальной базе ID Game и ID desk совпадают, поэтому делаю JOIN по ID и здесь все работает:

SELECT *
    FROM games game
    JOIN desk d ON game.id = d.id
    where game.game = "Baseball";

1,Baseball,BS,1,Hand game

Когда делаю второй JOIN по code (кстати не понятно, правильно ли делаю, не будет ли ошибок при большем кол-ве данных?) получаю логично информацию из code:
SELECT *
    FROM games game
    JOIN desk d ON game.id = d.id
    JOIN code c ON game.code = c.code
    where game.game = "Baseball";


1,Baseball,BS,1,Hand game,1,BS,BS INFO

Но когда делаю запрос, где code null, как, например, в Tennis, то не получаю никакого вывода.

SELECT *
    FROM games game
    JOIN desk d ON game.id = d.id
    JOIN code c ON game.code = c.code
    where game.game = "Tennis";

Необходим обязательный вывод по ID из таблиц game и desk, а в случае отсутствие code вывести null по всех колонках таблицы code, но обязательно, чтобы отработал join по id.

Как правильно сформировать такой SQL запрос?
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега SQL
Седой и строгий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы