2013-02-04 68 views
2

我得到「錯誤:#1242 - 子查詢返回多個1行」試圖執行此查詢:SQL錯誤:#1242 - 子查詢返回多個1

SELECT id FROM postcodes WHERE pcd LIKE (SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604)) 

你有沒有這方面的任何建議查詢?

回答

3

JOIN兩個表,而不是IN斷言,這樣的:

SELECT p.id 
FROM postcodes p 
INNER JOIN towns t ON p.pcd LIKE CONCAT(t.pcd,' %') 
WHERE t.id IN (31898,12828,15771,7604); 
+0

輝煌!謝謝! – Amir

+0

@Amir - 不客氣。 –

1

入住此查詢:

SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604) 

也許它的結果不止一行。

或者您可以限制子查詢結果。

SELECT id FROM postcodes WHERE pcd LIKE (SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604) LIMIT 1) 
+0

其實我不想限制,如果我想限制這些結果,我不會在聲明中!我可以執行這個查詢每個這些id的單獨但它不是有效的,我想知道是否有一個有效的查詢,可以做這個SELECT。 – Amir

0

您必須將子查詢限制爲一行。要麼你應該添加一些過濾器來限制結果爲一行或添加LIMIT 1到你的子查詢將爲你做的伎倆。

+0

其實我不想限制,如果我想限制這些結果,我不會在聲明中!我可以執行這個查詢每個這些id的單獨但它不是有效的,我想知道是否有一個有效的查詢,可以做這個SELECT。 – Amir

-1

我#1242 - 子查詢返回多個1行 SELECT LnDetails.EID,LnDetails.LnAmt,LnDetails.Tenure, LnDetails.UsedTenure,LnDetails.RePayAmt,LnDetails.Paid,LnDetails.OutSPay, LnDetails.IntRate,LnDetails.LnDesc,LnDetails.Pnarration,LnDetails。 Status,LnDetails.FStatus,LnDetails.AddedBy,CAST(LnDetails.AddedDate AS CHAR)AS AddedDate,LnDetails.UpdatedBy,LnDetails.UpdatedDate,LnDetails.DeletedBy,LnDetails.DeletedDate, LnDetails.AuthBy,CAST(LnDetails.AuthDate AS CHAR) AS AuthDate,LnDetails.PaidBy,LnDetails.PaidDate,LnDetails.HashKey, LnDetails.RepayType, ( SELECT SNAME FROM LnCore WHERE(HashKey = LnDetails.LoanScheme))AS LoanScheme,CAST(LnDetails.SRepayDate AS CHAR)AS SRepayDate,CAST(LnDetails.ERepayDate AS CHAR)AS ERepayDate,CONCAT(EmpTbl_1.SName,'',EmpTbl_1.FName,'[',EmpTbl_1.EmpID'''')AS FullName, ( SELECT CONCAT(SName,' ',FName)AS Expr1 FROM EmpTbl WHERE(HashKe Y = LnDetails.AuthBy))AS AuthedBy,EmpTbl_1.EmpType,EmpTbl_1.Mobile,EmpTbl_1.Department FROM EmpTbl AS EmpTbl_1 INNER從該查詢JOIN LnDetails ON EmpTbl_1.HashKey = LnDetails.EID

。 請提出任何建議。謝謝。

相關問題