是否可以检查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/

10-12 23:52