是否可以检查SELECT语句的结果,并根据是否从该查询返回行来执行另一个SELECT语句?
执行SELECT语句A。
如果返回了行,
执行SELECT语句B。
如果未返回行,
执行SELECT语句C。
我想到了以下几点,但它不起作用。
SELECT IF(
(SELECT * FROM client_emails ce WHERE ce.client_id = 3),
(SELECT * FROM client_emails ce WHERE ce.client_id = 3),
(SELECT * FROM emails)
)
最佳答案
您绝对可以检查null。
这是一个示例代码,它将向您展示如何检查空值,以及如何使用TSQL在条件块中使用它
--check for null
SELECT *
FROM dbo.Accounts
WHERE name IS NOT NULL
--check for non-null
SELECT *
FROM dbo.Accounts
WHERE name IS NOT NULL
--checking for null in conditional block
IF(EXISTS(SELECT 1 FROM dbo.Accounts WHERE name IS NULL))
BEGIN
--create new account
INSERT INTO dbo.Account
VALUES('John')
END
-----------------更新您的意见------------------------
基于第一个代码示例,您知道可以使用EXISTS检查行是否存在。因此,如果您花了一些时间对此进行思考,您将意识到可以执行以下操作
/*
Execute SELECT statement A.
If rows had been returned,
Execute SELECT statement B.
*/
--statement B
SELECT *
FROM dbo.Accounts a
WHERE a.name = 'John'
AND EXISTS
(
--statement A
SELECT 1
FROM dbo.Address
WHERE account_id = a.account_id
)
/*
If rows had not been returned,
Execute SELECT statement C.
*/
--statement c
SELECT *
FROM dbo.Accounts a
WHERE a.name = 'David'
AND NOT EXISTS
(
--statement A
SELECT 1
FROM dbo.Address
WHERE account_id = a.account_id
)
关于mysql - 如何检查是否在SELECT语句中返回了行,并基于此运行另一个查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37686195/