假设我有一张桌子,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;
答案 0 :(得分:0)
您应该显示您的查询。
发生此问题的一个常见位置是where
(或having
)子句。如果子查询位于in
子句中,则此问题的解决方案是使用=
而不是where
。如果你有类似的东西:
where id = (select id2 . . .)
然后将其更改为:
where id in (select id2 . . .)
答案 1 :(得分: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;