我有以下MySQL查询,它在SQL8中的行为与我预期的一样,但在5.7版本中没有产生相同和正确的结果,我不知道原因是什么……
SELECT concat(table_name, '_', column_name) as missing
from information_schema.columns
where table_schema = 'ref_schema' and table_name in ('aliases','indiv') and
concat(table_name, '_', column_name) not in (
select concat( columns.table_name,'_',columns.column_name) as v
from information_schema.columns
where table_schema = 'new_schema'
);该查询基本上是比较来自两个模式(ref_schema和new_schema)的两个表(别名和indiv)结构,并假定列出第二个模式中缺少的列……
假设两个模式中的表结构相同,它应该返回0row。它对MySQL8也是这样做的。但在5.7版本中,它返回完整的列集合。"NOT IN“条件似乎没有正确执行。
我使用MySQL8进行调试。5.7用于prod。所以我需要让它在5.7上运行。
任何帮助都将不胜感激。
发布于 2020-10-12 19:16:28
应用Akina fix给出了正确的答案,并解决了我的问题:
SELECT concat(table_name, '_', column_name) as missing
FROM information_schema.columns
WHERE
table_schema = 'ref_schema' and
table_name in ('aliases','indiv') and
(table_name,column_name) not in (
select table_name,column_name
from information_schema.columns
where table_schema = 'new_schema'
);现在,两个平台都提供了相同且准确的结果。语法甚至更容易阅读!
https://stackoverflow.com/questions/64316030
复制相似问题