programing

MariaDB 10.3+ Left JOIN 및 사용자 정의 변수가 추가 행을 반환합니다.

codeshow 2023. 10. 9. 23:39
반응형

MariaDB 10.3+ Left JOIN 및 사용자 정의 변수가 추가 행을 반환합니다.

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

언급URL : https://stackoverflow.com/questions/61231364/mariadb-10-3-left-join-and-user-defined-variable-returns-extra-rows

반응형