0

假设我有一个表 myTable,如下所示:

ID1   Value    ID2
1     6.5064   3
2     7.9000   3
3     9.9390   3
4     8.6585   3

我要做的是为给定的 ID2 选择每个值。但是,为 Value 返回的行数可以更改。因此,如果 ID2 = 2,则可能只返回 1 行。如果 drID = 4,则可能会返回 3 行。我的查询中试图处理这个问题的部分是嵌套的,所以当我运行它时,我得到一个“子查询返回超过 1 行”错误。知道如何以这种方式选择可变数量的行吗?

提前致谢!

编辑:这是我到目前为止所拥有的,注释掉的部分是我希望为我选择这些值的部分,但它会引发上述错误:

SELECT drDateTime AS Date,
(SELECT fncName FROM functionlist 
WHERE datarecord.fncID = functionlist.fncID) AS FunctionName,

(SELECT alText FROM alarmlevellist
WHERE datarecord.alID = alarmlevellist.alID) AS AlarmDescription

#(SELECT rdValue FROM rawdata
#WHERE datarecord.drID = rawdata.drID)

FROM datarecord
WHERE alID IS NOT NULL AND drSumFlag = 1;
4

2 回答 2

0

您应该显示您的查询。

出现此问题的一个常见位置是在where(or having) 子句中。如果子查询在子句中,则此问题的解决方案是使用in而不是。如果你有类似的东西:=where

where id = (select id2 . . .)

然后将其更改为:

where id in (select id2 . . .)
于 2013-04-29T21:13:56.417 回答
0

使用联接而不是子查询。我可能会为所有表使用连接,但这取决于你。

SELECT drDateTime AS Date,
(SELECT fncName FROM functionlist WHERE datarecord.fncID = functionlist.fncID) AS FunctionName,
(SELECT alText FROM alarmlevellist WHERE datarecord.alID = alarmlevellist.alID) AS AlarmDescription,
rawData.drID
FROM datarecord
INNER JOIN rawdata
ON datarecord.drID = rawdata.drID)
WHERE alID IS NOT NULL AND drSumFlag = 1;
于 2013-04-29T21:22:07.623 回答