第二个SELECT查询,如果第一个SELECT返回0行

Eva*_*van 12 mysql sql

我正在尝试加速PHP脚本,我目前在Mysql域中推送一些PHP逻辑.如果第一个Select没有返回任何行,或者计数为零,是否有办法生成不同的选择查询?

请记住,第一个查询需要先运行,第二个查询只有在第一个查询返回空集时才会被激活.

SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')
Run Code Online (Sandbox Code Playgroud)

对于上面的2个查询,我有这个代码,但它似乎运行每个查询两次(一次计数,一次返回).有一个更好的方法吗?

IF (SELECT count(*) FROM proxies WHERE A='B')>0
    THEN SELECT * FROM proxies WHERE A='B'
ELSEIF (SELECT count(*) FROM proxies WHERE A='C')>0
    THEN SELECT * FROM proxies WHERE A='C'
END IF
Run Code Online (Sandbox Code Playgroud)

sge*_*des 15

一种选择是使用UNION ALLEXISTS:

SELECT * 
FROM proxies 
WHERE A='B'
UNION ALL
SELECT * 
FROM proxies 
WHERE A='C' AND NOT EXISTS (
    SELECT 1
    FROM proxies 
    WHERE A='B'
)
Run Code Online (Sandbox Code Playgroud)

这将返回proxies表中的行(A='B'如果存在).但是,如果它们不存在,它将查找那些行A='C'.


Fab*_*ion 7

SELECT * 
FROM proxies 
WHERE A=(CASE WHEN
             (SELECT COUNT(*) FROM proxies WHERE A='B') > 0 THEN'B' 
              ELSE 'C' END)
Run Code Online (Sandbox Code Playgroud)

UPDATE

SELECT * 
FROM proxies 
WHERE (
    CASE WHEN (SELECT COUNT(*) FROM proxies WHERE A='B' LIMIT 1) > 0 THEN
            (A='B')
         WHEN (SELECT COUNT(*) FROM proxies WHERE A='C' LIMIT 1) > 0 THEN
            (A='C')
         WHEN (SELECT COUNT(*) FROM proxies WHERE A='D' LIMIT 1) > 0 THEN
            (A='D')
         ELSE 1=2 END)
Run Code Online (Sandbox Code Playgroud)