Bug #12681 INSERT INTO table FROM view does not work correctly in all cases
Submitted: 19 Aug 2005 17:50 Modified: 23 Aug 2005 12:56
Reporter: Jonathan Miller Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server: Optimizer Severity:S2 (Serious)
Version:5.0.wl1012 OS:Linux (Linux)
Assigned to: Assigned Account CPU Architecture:Any

[19 Aug 2005 17:50] Jonathan Miller
Description:
In the following output from a test that I am creating (never mind that it is a rbr test) SELECT * FROM test.t3 should == + SELECT * FROM test.v1 but it does not.

But if you look at  SELECT * FROM test.v2 compared to SELECT * FROM test.t5 they do match.

CREATE TABLE test.t1 (a INT, c CHAR(6),PRIMARY KEY(a));
+ CREATE TABLE test.t2 (a INT, c CHAR(6),PRIMARY KEY(a));
+ CREATE TABLE test.t3 (a INT, c CHAR(6), c2 CHAR(6), PRIMARY KEY(a));
+ CREATE TABLE test.t4 (a INT, qty INT, price INT,PRIMARY KEY(a));
+ CREATE TABLE test.t5 (qty INT, price INT, total INT, PRIMARY KEY(qty));
+ INSERT INTO test.t1 VALUES (1,'Thank'),(2,'it'),(3,'Friday');
+ INSERT INTO test.t2 VALUES (1,'GOD'),(2,'is'),(3,'TGIF');
+ INSERT INTO test.t4 VALUES(1, 3, 50),(2, 18, 3),(4, 4, 4);
+ CREATE VIEW test.v2 AS SELECT qty, price, qty*price AS value FROM test.t4;
+ CREATE VIEW test.v1 AS SELECT t1.a, t1.c, t2.c as c2 FROM test.t1 as t1, test.t2 AS t2 WHERE test.t1.a = test.t2.a;
+ SELECT * FROM test.v2;

Master output

+ qty   price   value
+ 3     50      150
+ 18    3       54
+ 4     4       16
+ SELECT * FROM test.v1;
+ a     c       c2
+ 1     Thank   GOD
+ 2     it      is
+ 3     Friday  TGIF

Slave output

+ SELECT * FROM test.v2;
+ qty   price   value
+ 3     50      150
+ 18    3       54
+ 4     4       16
+ SELECT * FROM test.v1;
+ a     c       c2
+ 1     Thank   GOD
+ 2     it      is
+ 3     Friday  TGIF
+ INSERT INTO test.t5 SELECT * FROM test.v2;
+ INSERT INTO test.t3 SELECT * FROM test.v1;

Master output

+ SELECT * FROM test.t5;
+ qty   price   total
+ 3     50      150
+ 18    3       54
+ 4     4       16
+ SELECT * FROM test.t3;
+ a     c       c2
+ 1     Friday  TGIF
+ 2     Friday  TGIF
+ 3     Friday  TGIF

Slave output

+ SELECT * FROM test.t5;
+ qty   price   total
+ 3     50      150
+ 18    3       54
+ 4     4       16
+ SELECT * FROM test.t3;
+ a     c       c2
+ 1     Friday  TGIF
+ 2     Friday  TGIF
+ 3     Friday  TGIF
+ DROP VIEW IF EXISTS test.v1;
+ DROP VIEW IF EXISTS test.v2;
+ DROP VIEW IF EXISTS test.v3;
+ DROP VIEW IF EXISTS test.v4;
+ DROP TABLE IF EXISTS test.t3;
+ DROP TABLE IF EXISTS test.t1;
+ DROP TABLE IF EXISTS test.t2;
+ DROP TABLE IF EXISTS test.t4;

How to repeat:
see above
[23 Aug 2005 12:56] Evgeny Potemkin
Duplicate of bug #12382