-
Notifications
You must be signed in to change notification settings - Fork 8.3k
MySQL (table function, database engine) WHERE clause can't have condition on column from right table #19288
Copy link
Copy link
Closed
Labels
bugConfirmed user-visible misbehaviour in official releaseConfirmed user-visible misbehaviour in official releasecomp-foreign-dbConnectivity to external databases (ODBC/JDBC, MySQL, PostgreSQL, etc.).Connectivity to external databases (ODBC/JDBC, MySQL, PostgreSQL, etc.).duplicate
Description
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.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugConfirmed user-visible misbehaviour in official releaseConfirmed user-visible misbehaviour in official releasecomp-foreign-dbConnectivity to external databases (ODBC/JDBC, MySQL, PostgreSQL, etc.).Connectivity to external databases (ODBC/JDBC, MySQL, PostgreSQL, etc.).duplicate