通过使用第二个where子句中的第一个值,将一个查询的值与另一个查询的值组合在一起

时间:2014-09-02 10:59:08

标签: sql subquery

解释起来会很复杂,但希望你得到我想要完成的事情。

我有一个转置数据集,如下所示:

STATION    | MEDIA   | TEMPERATURE | 

station 1  | Water   | 50

station 1  | acid    | 20

这是通过在where子句中使用特殊eventID获得的。每个id最多可以返回10行

我现在有一个通过运行不同的查询获得的EventID列表

我想将此列表传递给第一个查询,并且具有如下所示的结果集:

EventID  |STATION    | MEDIA   | TEMPERATURE | 

1        |station 1  | Water   | 50          |

1        |station 1  | acid    | 20          |  

2        |station 1  | Water   | 66          |

2        |station 1  | acid    | 35          |

我尝试了程序但是当有很多id(可以是50或更多)时这需要很长时间 每个ID都需要单独传递,因为我正在分组在转换表之前进行临时等计算。 是否有一种基于集合的方式来实现这一点,我基本上没有遍历每个ID行?

3 个答案:

答案 0 :(得分:0)

这是join个查询。在这种情况下,您使用join过滤结果:

select d.*
from dataset1 d join
     differentquery q
     on d.station = q.station;

在开头获取id列取决于数据库。一种典型的方法是:

select row_number() over (partition by station order by station) as id, d.*
from dataset1 d join
     differentquery q
     on d.station = q.station;

答案 1 :(得分:0)

所以不要再使用WHERE id = 1执行第一个查询,而是想要WHERE id IN (ids from second query)之类的内容。你可以做到这一点:

select ... -- first query here
where id in
(
  select id -- second query here 
  from ...
);

答案 2 :(得分:0)

我不会依赖你理解你想要的东西,但是如果你想要行号那就是方法

SELECT ROW_NUMBER() OVER (ORDER BY m_product_id) AS Rw,
      station as st,
      media as med,
      tempiratue as tmp
    FROM YourTable

如果您想通过SELECT

获取行号
SELECT (Select ID from YourTable Where   --YourCountraint,
      station as st,
      media as med,
      tempiratue as tmp
    FROM YourTable

如果不只是告诉我你想要什么,我会更新我的回复