当前位置: 首页 > 面试题库 >

basic sql:当每次出现都取决于不同的where子句时,在一个查询中多次选择同一列

宇文迪
2023-03-14
问题内容

什么是执行此查询的最佳方法。我有下表

mytable与列

x y 
1 a
2 b
3 c

我想(在伪sql中)

select x as x1 ,x as x2, x as x3 from mytable where ????

什么时候

x1 is x where y=a

x2 is x where y=b

x3 is x where y=c

所以我想要

1, 2, 3

我当前正在使用cte和,并且数据集非常大,我正在尝试减少查询时间,是否总是需要进行3次表扫描?


问题答案:

您应该使用3个查询。当self加入时,使用正确的索引会快很多。此外,它将更具可读性。

如果您想进行一次查询调用,则可能是这样:)

SELECT
(SELECT x FROM table WHERE y=1) AS x1,
(SELECT x FROM table WHERE y=2) AS x2,
(SELECT x FROM table WHERE y=3) AS x3


 类似资料:
  • 问题内容: 我有一张调查答案表,类似: 并且我想创建一个查询,该查询将为我提供该表的结果摘要,从而允许我设置相关的日期范围。我下面的声明非常有效: 但是我不确定是否可以做得更好,以及在哪里添加日期范围过滤功能。 问题答案: 来自多刺的诺曼的第一个查询将给出这样的结果: 仅将几组不同的结果分组。我假设您想按问题将是/否的总数分类。在这种情况下,您必须执行以下操作: 结果:

  • 问题内容: 我有一个包含多个CTE的相当复杂的查询,但是其他人都从中提取了1个主要CTE,这是否会导致该主要CTE多次执行? 问题答案: 您可以这样使用CROSS JOIN: 这将防止的多次执行(有关实际执行计划,请参见属性)。 示例:如果执行此查询 使用数据库,那么实际的执行计划将是

  • 问题内容: 假设您有下表(这里关注的列是): 如何只提取每个的第一次出现?结果表将是: 问题答案: mysql对此有一个“作弊”: 这就是你所需要的,因为在MySQL中它可以让你 没有 聚集不分组,按列(其他数据库将抛出一个语法错误),在这种情况下,输出仅对每个第一次出现组由值(S)。不过,请注意,这将无法保证的 方式 中,“第一”发生确定(这将是行只是如何读) 如果您要先出现某个 特定的东西,

  • 我有一个关于查询对象两次的问题。我是说我有这样的情况: > - 后来在网站中,我把一个表单编辑一个实体。它就是上述实体之一。所以我查询这个实体的数据库(整体,而不是部分),并把它放在表单中。 问题是,如果我编辑其中一个实体,就不会再次查询它以获取所有字段,因为我以前已经查询过它。 你知道怎么解决这个问题吗?我不想查询选择框的完整实体。

  • 我想通过JDBC向Oracle DB发送一个准备好的语句SQL查询,如下所示: 只有在我提供3次时才起作用,但我不想这样做,我更希望调整准备好的语句的SQL,以便只使用一个但将其应用于所有条件。类似于 但这种尝试似乎并不奏效。有没有办法在SQL字符串中多次使用一个准备好的语句参数? 在@selvin的善意建议之后,我为准备好的语句使用了以下SQL字符串: 然后,我得到错误“ORA-06550:第1

  • 我写了这个程序,它以n和k为输入,然后以数组A[n]为输入。程序必须以数组a中小于k且为奇数的不同整数的总数no给出输出。但是这个程序的每一个输入都产生0作为输出。