Skip to content

MySQL (table function, database engine) WHERE clause can't have condition on column from right table #19288

@UnamedRus

Description

@UnamedRus

Describe the bug
When you trying to join different mysql tables, clickhouse would accept in WHERE clause only columns from left table.

Does it reproduce on recent release?
Yes

How to reproduce
Clickhouse 21.1

docker run --name misaka -e MYSQL_ROOT_PASSWORD=xxxxx -p 3306:3306 -d mysql:latest
mysql --host 127.0.0.1 --password
> use mysql;
> CREATE TABLE members (
    member_id INT AUTO_INCREMENT,
    name VARCHAR(100),
    PRIMARY KEY (member_id)
);

> CREATE TABLE committees (
    committee_id INT AUTO_INCREMENT,
    name VARCHAR(100),
    PRIMARY KEY (committee_id)
);


> INSERT INTO members(name)
VALUES('John'),('Jane'),('Mary'),('David'),('Amelia');

> INSERT INTO committees(name)
VALUES('John'),('Mary'),('Amelia'),('Joe');

clickhouse

 CREATE DATABASE mysql ENGINE=MySQL('127.0.0.1:3306','mysql','root','xxxxx');


SELECT *
FROM mysql.members AS m
INNER JOIN mysql.committees AS c ON m.name = c.name

┌─member_id─┬─name───┬─committee_id─┬─c.name─┐
│         1 │ John   │            1 │ John   │
│         3 │ Mary   │            2 │ Mary   │
│         5 │ Amelia │            3 │ Amelia │
└───────────┴────────┴──────────────┴────────┘


SELECT *
FROM mysql.members AS m
INNER JOIN mysql.committees AS c ON m.name = c.name
WHERE committee_id = 2

Code: 47. DB::Exception: Received from localhost:9000. DB::Exception: Missing columns: 'committee_id' while processing query: 'committee_id = 2', required columns: 'committee_id' 'committee_id'

SELECT *
FROM mysql.members AS m
INNER JOIN mysql.committees AS c ON m.name = c.name
WHERE `c.name` = 2

Code: 386. DB::Exception: Received from localhost:9000. DB::Exception: There is no supertype for types String, UInt8 because some of them are String/FixedString and some of them are not: while executing 'FUNCTION equals(c.name : 3, 2 : 4) -> equals(c.name, 2) Nullable(UInt8) : 5'. 

^ Clickhouse actually know that c.name type is String.

Additional context
It looks like that clickhouse trying to push all WHERE conditions to the left mysql table.
#14614 Looks like related.

Metadata

Metadata

Assignees

Labels

bugConfirmed user-visible misbehaviour in official releasecomp-foreign-dbConnectivity to external databases (ODBC/JDBC, MySQL, PostgreSQL, etc.).duplicate

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions