zhanggame1
(Ti D Ber G I13ecx U)
2023 年7 月 6 日 02:18
21
它的抽象逻辑其实是这样的:
select * from (
select 1 C5 from INFORMATION_SCHEMA.COLUMNS
where table_schema=‘test’
union all
select 6 C5 from INFORMATION_SCHEMA.COLUMNS
where table_schema=‘test’
) t where t.C5 =1 ;
由于6.5.3无法把C5=6的值给过滤掉,所以6.5.3比4.0.15的执行结果要多出一倍的数据。
因此原始sql执行后,在6.5.3会出现重复的字段,从而ef框架报出重复字段的错误’‘’
这部分没看懂,如果test下有个表id 和name列,这个语句查询结果应该是返回2个1,还要过滤什么吗?
1 个赞
Cloud王
(Hacker Yons Hv5m)
2023 年7 月 6 日 03:29
23
在4.0.15执行结果是返回两个1,但是在6.5.3返回结果是两个1和两个6。
即,6.5.3没有把6这个结果给过滤掉,返回结果是不正确的。
这样看的话确实有问题,理论上查出来的结果要一样,建议去github上提issue问一问
1 个赞
Cloud王
(Hacker Yons Hv5m)
2023 年7 月 6 日 05:42
27
zhanggame1:
where t.C5 =1不可能过滤不掉的
实际上6.5.3版本就是过滤不掉
不光是INFORMATION_SCHEMA.COLUMNS表,其他system view表也有很多过滤不掉。
1 个赞
knull
(Knull)
2023 年7 月 10 日 03:17
28
我 playground 跑了下,也是为空诶。。。
Cloud王
(Hacker Yons Hv5m)
2023 年7 月 10 日 05:37
29
需要有test库、并且test库下面有表。
或者直接执行这个语句:
select * from
(select 6 id from INFORMATION_SCHEMA.COLUMNS) t
where t.id =1 ;
我在3个6.5.3的环境里执行,结果都不是null,而是一堆6