当前位置: 首页 > 知识库问答 >
问题:

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

赵永新
2023-03-14

我正在尝试加速一个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个答案

赵锐
2023-03-14

一种选择是将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'查找那些行。

 类似资料:
  • 问题内容: 我试图加快PHP脚本的速度,目前正在Mysql域中推送一些PHP逻辑。如果第一个Select不返回行或计数为零,是否可以进行其他选择查询? 请记住,第一个查询需要首先运行,并且 仅 当第一个查询返回空集 时才 应激活第二个查询。 对于上面的2个查询,我有这段代码,但似乎每个查询运行两次(一次计数,一次返回)。有一个更好的方法吗? 问题答案: 一种选择是使用有: SQL小提琴演示 这将从

  • 问题内容: 我有: 现在,如果我已经有了h2标签,最简单的方法就是将Peter带到这里?现在我尝试了: 但是在这里我得到nth-child NotImplementedError: 所以我不确定这是怎么回事。第二种选择是只获取所有’p’标签子代并进行硬选择[1],但是存在索引超出范围的危险,这将需要用try /包围所有尝试让 Peter 尝试,除非这有点愚蠢。 有什么方法可以用汤.select()

  • 问题内容: 我现在正在使用Microsoft SQL,我的代码是: 我希望当[avail]存在时,返回[avail]的值,如果不存在,则返回0或“未找到” 谢谢! 问题答案: 你可以用这个

  • 问题内容: 我们有一个表格,其形式为: 我们需要将其转化为。 是否有一个聪明的方法可以在一个SELECT语句中执行此操作(即不使用UNION)?列名称Value1,Value2和Value3是固定的且恒定的。 该数据库是oracle 9i。 问题答案: 这适用于Oracle 10g: 我认为Oracle 9i有递归查询吗?无论如何,我非常确定它具有CASE支持,因此即使它没有递归查询,也可以执行“

  • 问题内容: 假设我有一个类似于以下表格: 项目组会定期添加。当添加一组项目时,它们都添加有相同的“时间”字段。本质上,“时间”充当该项目组的唯一索引。 我想选择时间第二高的项目组。在此示例中,我的查询应拉出“ B”项。我知道我可以做max()来选择“ A”项目,但是我不知道我该怎么做倒数第二。 如果这意味着任何内容,我的“时间”列将存储为TIMESTAMP。 问题答案: 您可以尝试类似:

  • 我的数据库中有两个表: 表1:购买物品 表1列出了购买的物品,表2每小时更新一次每件物品的当前价格。因此,从表2中可以清楚地看出,肉类最后一次交易是在2013年2月20日上午10点,而鱼类不是在同一天交易的,它是在2013年2月19日上午9点交易的,鸡肉是在2013年2月20日上午9点交易的。我想做的是,列出表1中的所有项目,并加入表2中各个项目的最后交易价格,如下所示: 这里应该应用什么类型的连