mysql MySQL 5.6 中的文本列上的子 select 未返回结果
mysql sub-select on a text column in MySQL 5.6 not returning results
我有一个类似下面的审计查询,用于审计我在 MySQL 中拥有的用户的 table 级别权限:
SELECT -- the list of privileges for tables
mt.host `host`,
mt.user `user`,
CONCAT(mt.Db, '.', mt.Table_name) `Tables`,
REPLACE(mt.Table_priv, ',', ', ') AS `Privileges`
FROM
mysql.tables_priv mt
WHERE
mt.Table_name IN
(SELECT
DISTINCT
t.table_name `tables`
FROM
information_schema.tables AS t
WHERE
t.table_type IN
('BASE TABLE', 'SYSTEM VIEW', 'TEMPORARY', '') OR
t.table_type <> 'VIEW' AND
t.create_options IS NOT NULL
)
在我从 MySQL 5.5 升级到 MySQL 5.6 之前,查询一直运行良好。现在它不起作用。 MySQL 5.6 中的文本列上的子 SELECT 是否存在某种问题?
看起来这可能是您的问题:
https://bugs.mysql.com/bug.php?id=77191
使用底部的解决方法,我能够让它工作。
set optimizer_switch='semijoin=off';
我有一个类似下面的审计查询,用于审计我在 MySQL 中拥有的用户的 table 级别权限:
SELECT -- the list of privileges for tables
mt.host `host`,
mt.user `user`,
CONCAT(mt.Db, '.', mt.Table_name) `Tables`,
REPLACE(mt.Table_priv, ',', ', ') AS `Privileges`
FROM
mysql.tables_priv mt
WHERE
mt.Table_name IN
(SELECT
DISTINCT
t.table_name `tables`
FROM
information_schema.tables AS t
WHERE
t.table_type IN
('BASE TABLE', 'SYSTEM VIEW', 'TEMPORARY', '') OR
t.table_type <> 'VIEW' AND
t.create_options IS NOT NULL
)
在我从 MySQL 5.5 升级到 MySQL 5.6 之前,查询一直运行良好。现在它不起作用。 MySQL 5.6 中的文本列上的子 SELECT 是否存在某种问题?
看起来这可能是您的问题: https://bugs.mysql.com/bug.php?id=77191 使用底部的解决方法,我能够让它工作。
set optimizer_switch='semijoin=off';