[英]Limiting subquery result based on main query value
我有一個叫'prize'的小桌子,里面有3個字段,
Event_id | Place | Money
-------------------------
101 | 1 | 120
101 | 2 | 60
...等等。
現在,帶有子查詢的基本查詢如下:
Select Event_id,
(SELECT money FROM prize WHERE place=1) AS 'First',
...等等。
子查詢顯然返回太多行(因為有多個事件)。 如何將其限制為僅返回與Event_id字段對應的值?
我已經嘗試了許多次迭代,但均未成功,因此感謝您的幫助。
將查詢更改為:-
Select Event_id,
(SELECT MAX(money) FROM prize WHERE place=1 LIMIT 1) AS 'First',
您需要在子查詢中指定事件:-
SELECT Event_id,
(SELECT money FROM prize AS sub1 WHERE sub1.Event_id = prize.Event_id AND place=1) AS 'First',
.....
FROM prize
但是,如果事件有多行,則每個地方都有一行,那么它將返回多行。 可以使用DISTINCT解決此問題。
SELECT DISTINCT Event_id,
(SELECT money FROM prize AS sub1 WHERE sub1.Event_id = prize.Event_id AND place=1) AS 'First',
.....
FROM prize
但是,這不太可能有效。 它將對獎品表上的每一行分別執行一次子查詢。
一個可能的解決方案是使用聚合函數來獲取特定值,具體取決於place的值:
SELECT Event_id,
MAX(IF(place=1, money, 0)) AS 'First',
MAX(IF(place=2, money, 0)) AS 'Second',
......
FROM prize
GROUP BY Event_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.