2012-03-15 126 views
0

您好我有一個MySQL查詢獲取了許多的id(studentID)的,下面MySQL錯誤:子查詢返回多個1行

select t1.studentID 
from remittedfees t1 
where (select t2.fees 
     from feesasigned t2 
     where t2.studentID=t1.studentID) = (select sum(t3.remittedAmt) 
              from remittedfees t3 
              where t3.studentID = t1.studentID); 

給出,但該查詢返回以下錯誤

ERROR 1242 (21000): Subquery returns more than 1 row 

如何重寫查詢以獲得結果?

+0

你想要檢索的字段是什麼? – 2012-03-15 05:24:18

+1

請使用數據添加關於您的表格結構的更多信息。 – 2012-03-15 05:25:10

回答

1

試試這個[更新]:

SELECT t2.studentID 
    from feesasigned t2 
    INNER JOIN (
    SELECT t3.studentID, SUM(t3.remittedAmt) FeeSum 
    FROM remittedfees t3 
    GROUP BY t3.studentID) v ON t2.studentID = v.studentID and t2.fees = v.FeeSum 
0

最有可能的select t2.fees查詢正在執行,就像錯誤所述 - 返回多行。當做這樣的平等比較時,=的兩邊必須是單個值。如果一方返回2+值,那麼你最終與

1 = 1 
2 
3 

好的......什麼是平等的? 1 = 1? 2 = 1? 3 = 1?作爲比較結果應該使用哪一個「真值」值?

0

我想你想檢索StudentIDfeesasigned表,其fees是queal總remittedAmtremittedfees表。那就試試這個:

SELECT a.studentID, b.fees, SUM(a.remittedAmt) TotalFees 
FROM remittedfees a INNER JOIN feesasigned b 
      on a.studentID = b.studentID 
GROUP BY a.studentID, b.fees 
HAVING b.fees = SUM(a.remittedAmt) 
+1

我認爲b.fees應該是'group by'的一部分,否則它可能會拋出錯誤 – 2012-03-15 05:35:09

+0

哦,是的,我忘了添加它。 – 2012-03-15 05:37:00

+0

你也可以刪除額外加入匯款表並使用'sum(a.remittedAmt)':) – 2012-03-15 05:42:11

0

也許你正在尋找:

SELECT t2.studentID FROM feesasigned t2 
INNER JOIN 
    (select sum(t3.remittedAmt) as remitted_total, t3.studentID from remittedfees t3 
    GROUP BY t3.studentID) t4 
ON 
    t2.fees = t4.remitted_total AND t2.studentId = t4.studentID 

它返回誰已支付其所有費用,學生的ID

+0

當你做'sum(column),column2'你需要使用'group by column2',請更新你的查詢:) – 2012-03-15 05:43:53

+0

哦...是的...謝謝你指出... @rs。 – 2012-03-15 15:01:44