有沒有辦法讓MySQL知道哪個子查詢在充滿子查詢的巨大自動生成查詢中給出了上述錯誤?如果不是的話,你會採取什麼策略來調試它?如何調試MySQL錯誤1242(子查詢返回多於1行)?
0
A
回答
1
我會開始在查詢和可能的子查詢上使用LIMIT或DISTINCT。 如果這樣做不起作用,我會開始通過並單獨運行每個子查詢,是的,這是耗時的,但我發現它也有助於避免將來出現同樣的問題。
1
例子查詢:
UPDATE direct_orders do
SET do.dealer_id = (
SELECT d.dealer_id FROM dealers d
INNER JOIN dealer_addresses da
ON da.dealer_id = d.dealer_id
AND da.type = 'M'
AND da.status = 1
INNER JOIN dealer_details dd
ON dd.dealer_id = d.dealer_id
AND dd.status = 1
WHERE (da.address1 LIKE CONCAT( '%', do.address1, '%') AND do.postal LIKE da.postal_code)
OR dd.name LIKE CONCAT( '%', do.company, '%')
AND do.dealer_id = 0
)
這個查詢是失敗,出於同樣的原因作爲海報。適當測試的一種方法是做類似如下(注意LEFT JOIN這是在爲子關聯以前依賴表):
SELECT d.dealer_id FROM dealers d
LEFT JOIN direct_orders do
ON do.dealer_id = 0
INNER JOIN dealer_addresses da
ON da.dealer_id = d.dealer_id
AND da.type = 'M'
AND da.status = 1
INNER JOIN dealer_details dd
ON dd.dealer_id = d.dealer_id
AND dd.status = 1
WHERE (da.address1 LIKE CONCAT( '%', do.address1, '%') AND do.postal LIKE da.postal_code)
OR dd.name LIKE CONCAT( '%', do.company, '%')
這樣做透露,有實際上一個記錄從從「經銷商」表中返回多個「dealer_id」的「direct_orders」表。
相關問題
- 1. MySQL子查詢錯誤錯誤1242(21000):子查詢返回多於1行
- 2. 錯誤代碼:1242子查詢返回多於1行mysql
- 3. MYSQL - 錯誤:#1242 - 子查詢返回多於1行
- 4. 子查詢返回多於1行,錯誤1242
- 5. 錯誤代碼:1242.子查詢返回多於1行 - 函數
- 6. 1242 - 子查詢返回多個1行
- 7. #1242 - 子查詢返回多個1行
- 8. 1242 - 子查詢在子查詢中返回多於1行
- 9. MYSQL:基數衝突:1242子查詢返回多於1行?
- 10. #1242 - 子查詢返回多於1行 - mysql
- 11. mysql#1242 - 子查詢返回多於1行
- 12. 錯誤代碼:1242子查詢返回多個1行
- 13. 1242 - 子查詢返回多於1行1
- 14. mysql子查詢返回多於1行查詢錯誤
- 15. 錯誤#1242子查詢在更新時返回多於一行
- 16. 錯誤1242子查詢返回多於一行
- 17. 錯誤:#1242 - 子查詢返回多於一行
- 18. mysql n:m關係刪除查詢1242子查詢返回多於1行
- 19. 如何在Mysql中解決此問題(#1242 - 子查詢返回多於1行)?
- 20. InternalError該:(1242, '子查詢返回多於1行')
- 21. 「#1242 - 子查詢返回多於1行」,而插入
- 22. SQL錯誤:#1242 - 子查詢返回多個1
- 23. 子查詢返回多於1行MySQL
- 24. SQL錯誤(1242):子查詢返回超過1行
- 25. 我有錯誤1242子查詢返回超過1行
- 26. MySql錯誤1242:子查詢返回多個行,但查詢不能使用JOINS
- 27. mysql錯誤:子查詢返回多於1行
- 28. MySql拋出錯誤子查詢返回多於1行
- 29. Mysql Query:表示子查詢返回多於1行的錯誤
- 30. 如何處理這個錯誤1242(21000):子查詢返回多於一行
分而治之:將一半以上的子查詢註釋掉並運行。看看是否有錯誤。如果沒有錯誤,請刪除評論並註釋掉另一半。如果錯誤仍然存在,那麼刪除一半子查詢 – bpgergo
@bpgergo中的評論:這對我來說似乎非常脆弱。用一個常量值替換一個子查詢(我認爲這就是你通過註釋掉的意思)可能會導致一些連接不匹配,並且未註釋掉的一半部分被優化;或者有問題的子查詢可能與通過註釋改變的值相關。所以即使錯誤消失後,我也無法確定錯誤在哪裏。 – Tgr
是的,你對WHERE子句中的子查詢是正確的。出於某種原因,我認爲子查詢在FROM子句中。 – bpgergo