0

Like the title suggests I have a query that runs fine in mysql but gives error with mariadb:

[42S22][1054] (conn=38) Unknown column 'ME.membershipId' in 'where clause'

The script that can be run to test the problem:

create database demo;
use demo;

drop table if exists MembershipEvent;
drop table if exists MembershipType;
drop table if exists Membership;

create table Membership
(
    id   int primary key,
    name varchar(50)
);

create table MembershipType
(
    id   int primary key,
    name varchar(50) unique not null
);

create table MembershipEvent
(
    id               int primary key,
    membershipId     int      not null,
    membershipTypeId int      not null,
    eventTime        datetime not null,
    foreign key (membershipTypeId) references MembershipType (id),
    foreign key (membershipId) references Membership (id)
);

insert into Membership (id, name)
values (1, 'Awesome Mike'),
       (2, 'Lazy Mary'),
       (3, 'Some Due'),
       (4, 'Old Gold');
insert into MembershipType (id, name)
values (1, 'basic'),
       (2, 'semi'),
       (3, 'super'),
       (4, 'terminated');
insert into MembershipEvent (id, membershipId, membershipTypeId, eventTime)
values (1, 1, 1, '2023-01-01'),
       (2, 1, 2, '2023-03-01'),
       (3, 2, 1, '2023-01-10'),
       (4, 2, 2, '2023-02-20'),
       (5, 2, 3, '2023-03-04'),
       (6, 3, 1, '2023-03-10'),
       (7, 3, 4, '2023-05-01');


select M.id as MembershipId, M.name as memberName, MT.name as currentMembershipTypeName, ME.eventTime as currentMembershipStartTime
from Membership M
         left join MembershipEvent ME on M.id = ME.membershipId
         left join MembershipType MT on ME.membershipTypeId = MT.id

where exists(select *
             from (select InnerME.id, InnerME.membershipTypeId
                   from MembershipEvent InnerME
                   where InnerME.membershipId = ME.membershipId
                     and InnerME.eventTime <= NOW()
                   order by InnerME.eventTime desc
                   limit 1) TEMP
             where TEMP.membershipTypeId not in (4)
               and TEMP.id = ME.id);

Is this a bug or has mariadb some drawbacks regarding subqueries compared to mysql?

  • mariadb version: 10.6.12
  • mysql version: 8.0.32
  • I managed to produce the same error on the latest 10.6 development branch along with 11.0. Please create a [bug report](https://jira.mariadb.org) – danblack Mar 31 '23 at 04:16

0 Answers0