为什么 MySQL5.7 好像忽略了子查询

Why MySQL5.7 seems to ignore subquery

我有以下 SQL 查询,它在 MySQL 8 中的行为与我预期的一样,但在 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' 
    );

查询基本上是比较来自 2 个模式(ref_schema 和 new_schema)的 2 个 table(别名和独立)结构,并且应该列出第二个模式中缺失的列一个...

假设 table 结构在两个模式中是相同的,它应该 return 0 行。它与 MySQL8 一起使用。但在 5.7 版中,它 return 是完整的列集。似乎“NOT IN”条件没有正确执行。

我正在使用 MySQL8 进行调试。 5.7 用于产品。所以我需要在 5.7 上安装它 运行。

如有任何帮助,我们将不胜感激。

应用 Akina 修复给出了正确的答案并解决了我的问题:

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' 
    );

现在两个平台都提供相同且准确的结果。语法更易读!