MariaDB 10.3+ LEFT JOIN и пользовательская переменная возвращает дополнительные строки - PullRequest
1 голос
/ 15 апреля 2020

Используя MariaDB 10.0, следующий код SQL возвращает только одну строку:

DROP TABLE IF EXISTS TestTable1;
CREATE TABLE `TestTable1` (
  `SomeColumn` int(11) NOT NULL,
  PRIMARY KEY (`SomeColumn`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO TestTable1 (`SomeColumn`) VALUES ('42');

SELECT * FROM TestTable1 LEFT JOIN (SELECT @p:=123 AS moo)  pd ON TRUE;

# SomeColumn, moo
42, 123

Однако тот же код в MariaDB 10.3 и 10.4 (к сожалению, у меня нет доступа к MariaDB 10.1 или 10.2) возвращает две строки!

# SomeColumn, moo
42, 123
42, 123

Обратите внимание, что это происходит только при использовании пользовательской переменной . Например, следующий код создает только одну строку, как и ожидалось:

DROP TABLE IF EXISTS TestTable1;
CREATE TABLE `TestTable1` (
  `SomeColumn` int(11) NOT NULL,
  PRIMARY KEY (`SomeColumn`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO TestTable1 (`SomeColumn`) VALUES ('42');

SELECT * FROM TestTable1 LEFT JOIN (SELECT 123 AS moo)  pd ON TRUE;

У нас много кода, который зависит от этого поведения, и моя цель - заставить MariaDB 10.3+ вести себя «по-старому» и вернуть только одну строку в этом случае.

NB: Вы можете легко попробовать это самостоятельно с помощью https://dbfiddle.uk/

NB2: Отчет об ошибке: https://jira.mariadb.org/browse/MDEV-22264

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