Sql 存在与 MySql 存在
Sql Exists vs MySql Exists
在 MySql 中,我可以 return(有效的)一个布尔值,使用它来确定数据库是否按名称存在。
SELECT EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'MyDatabase')
MS SQL 有什么相同之处?
在SQL服务器中你可以这样做:
IF EXISTS (SELECT 1 FROM ...)
SELECT 1
ELSE
SELECT 0
有意思的是,EXISTS函数虽然做的是return一个可以通过IF测试的boolean,但是不能直接选择
这在 SQL 服务器中不起作用:
SELECT EXISTS(SELECT 1)
但是这样做:
IF EXISTS(SELECT 1)
SELECT 1
ELSE
SELECT 0
奇怪。
编辑:进一步思考,我猜想 MySQL 可能会把 EXISTS()
当作一个 return 是一个值的函数,而 SQL Server 将其视为条件表达式,要么通过要么失败,但 return 没有值。
所以在 SQL 服务器 中,尝试 SELECT
EXISTS()
的结果就像尝试 SELECT ('a' > 'b')
一样。它做不到。我想知道如果你尝试 MySQL 会怎样?
使用CASE WHEN EXISTS()..
SELECT CASE WHEN EXISTS(SELECT * FROM ...) THEN 1 ELSE 0 END
t-sql 中没有布尔值这样的东西。最接近的是实际上允许三个值(0、1 和 NULL)的位。如果你想 select 1 或 0,你可以通过将 count(*) 转换为位来实现。 0 以外的任何值都将是 1。
select MyResult = convert(bit, count(*))
FROM information_schema.schemata
where SCHEMA_NAME = 'YourSchemaName'
在 MySql 中,我可以 return(有效的)一个布尔值,使用它来确定数据库是否按名称存在。
SELECT EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'MyDatabase')
MS SQL 有什么相同之处?
在SQL服务器中你可以这样做:
IF EXISTS (SELECT 1 FROM ...)
SELECT 1
ELSE
SELECT 0
有意思的是,EXISTS函数虽然做的是return一个可以通过IF测试的boolean,但是不能直接选择
这在 SQL 服务器中不起作用:
SELECT EXISTS(SELECT 1)
但是这样做:
IF EXISTS(SELECT 1)
SELECT 1
ELSE
SELECT 0
奇怪。
编辑:进一步思考,我猜想 MySQL 可能会把 EXISTS()
当作一个 return 是一个值的函数,而 SQL Server 将其视为条件表达式,要么通过要么失败,但 return 没有值。
所以在 SQL 服务器 中,尝试 SELECT
EXISTS()
的结果就像尝试 SELECT ('a' > 'b')
一样。它做不到。我想知道如果你尝试 MySQL 会怎样?
使用CASE WHEN EXISTS()..
SELECT CASE WHEN EXISTS(SELECT * FROM ...) THEN 1 ELSE 0 END
t-sql 中没有布尔值这样的东西。最接近的是实际上允许三个值(0、1 和 NULL)的位。如果你想 select 1 或 0,你可以通过将 count(*) 转换为位来实现。 0 以外的任何值都将是 1。
select MyResult = convert(bit, count(*))
FROM information_schema.schemata
where SCHEMA_NAME = 'YourSchemaName'