簡體   English   中英

為什么 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 個表(別名和 indiv)結構,並且應該列出第二個中缺少的列......

假設兩個模式中的表結構相同,它應該返回 0 行。 它與 MySQL8 的關系。 但在 5.7 版中,它返回完整的列集。 似乎沒有正確執行“NOT IN”條件。

我使用 MySQL8 進行調試。 5.7 用於生產。 所以我需要讓它在 5.7 上運行。

任何幫助,將不勝感激。

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

現在,兩個平台都提供相同且准確的結果。 語法更容易閱讀!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM