如何使用mysql选择动态行数

时间:2013-04-29 21:10:48

标签: mysql

假设我有一张桌子,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;

2 个答案:

答案 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;
相关问题