从同一个表中选择两个值但条件不同

mat*_*ttw 8 query reporting

我想将表中的值抓取到同一表中不同值的两个不同列中。使用此查询作为示例(注意选择是如何在别名为 2 个不同表的同一个表上的):

SELECT a.myVal, b.myVal 
FROM MyTable a, MyTable b
WHERE 
  a.otherVal = 100 AND
  b.otherVal = 200 AND
  a.id = b.id
Run Code Online (Sandbox Code Playgroud)

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

dat*_*god 10

为了可读性,我将使用更现代的连接语法重写查询。这将清楚地将您的加入条件与您的过滤器分开。

select a.myVal,
       b.myVal
  from MyTable a
  join MyTable b on b.id = a.id
where a.OtherVal = 100
  and b.Otherval = 200
Run Code Online (Sandbox Code Playgroud)

为了性能,请确保您有适当的索引。在这个有限的示例中,理想情况下,您应该在 ID 上有一个聚集索引,在 OtherVal 上有一个非聚集索引。

但是,在查看您的查询之后,我无法确定您正在尝试完成什么。

  • @wolfram77,这仍然是一个连接。 (2认同)