[英]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.