作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!