簡體   English   中英

根據主查詢值限制子查詢結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM