query – 从同一个表中选择但在不同条件下的两个值

我想从表中获取一个值到两个不同的列中,以获取同一个表中的不同值.使用此查询作为示例(请注意select在同一个表中如何别名为2个不同的表):

SELECT a.myVal, b.myVal 
FROM MyTable a, MyTable b
WHERE 
  a.otherVal = 100 AND
  b.otherVal = 200 AND
  a.id = b.id

当我在我的数据集上运行这样一个相对简单的查询时,它可以工作 – 它只需要很长时间.是否有更好/更智能的方式来编写此查询?

最佳答案
为了便于阅读,我将使用更现代的连接语法重写查询.这样可以清楚地将您的加入条件与过滤条件分开.

select a.myVal,
       b.myVal
  from MyTable a
  join MyTable b on b.id = a.id
where a.OtherVal = 100
  and b.Otherval = 200

为了提高性能,请确保您拥有适当的索引在这个有限的示例中,理想情况下,您将在ID上使用聚簇索引,在OtherVal上使用非聚集索引.

但是,在查看了您的查询后,我无法确定您要完成的是什么.

转载注明原文:query – 从同一个表中选择但在不同条件下的两个值 - 代码日志