gpt4 book ai didi

MySQL用IF函数检查表是否存在

转载 作者:行者123 更新时间:2023-11-30 22:18:48 24 4
gpt4 key购买 nike

SELECT IF((
SELECT COUNT(TABLE_NAME)
FROM information_schema.tables
WHERE TABLE_SCHEMA='database0' AND TABLE_NAME='table'
) >0 , (
SELECT id
FROM database1.table
WHERE id NOT IN (SELECT id FROM database0.table)
), NULL) AS pk_value;

database0.table 可能不存在;如果表不存在,我想跳过 IF 语句的 true 子句。即使当 IF 语句应返回 NULL 时,我也会收到 database0.table 不存在的错误。如果表不存在,我该怎么做才能使查询返回 NULL 而不是抛出错误?

最佳答案

如评论中所述,查询在运行前会进行错误检查,因此引用不存在的表将不起作用。您可以将其存储为一个函数,该函数仅在运行时计算:

DROP FUNCTION IF EXISTS get_pk;
DELIMITER //

CREATE FUNCTION get_pk()
RETURNS INT

BEGIN
DECLARE counter INT;
DECLARE pk_value INT;

SELECT COUNT(table_name) INTO counter
FROM information_schema.tables
WHERE table_schema = 'database0' AND table_name = 'table';

IF counter = 1 THEN
SELECT id INTO pk_value
FROM database1.table
WHERE id NOT IN (SELECT id FROM database0.table);
ELSE
SELECT NULL INTO pk_value;
END IF;

RETURN pk_value;
END//

DELIMITER ;

然后像这样访问值:

SELECT get_pk();

关于MySQL用IF函数检查表是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37349248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com