提问者:小点点

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


我正在尝试加速一个PHP脚本,目前我正在推动一些PHP逻辑在Mysql领域的东西。如果第一个select没有返回行或计数为零,是否有方法进行不同的select查询?

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

SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')

对于上面的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

共1个答案

匿名用户

一种选择是将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'
)
  • SQL小提琴演示

这将从代理表返回行,其中a='b'(如果存在)。但是,如果它们不存在,它将以a='c'查找那些行。