2016-03-21 55 views
1

我有一個MySQL表稱爲活動像下面MySQL的 - 內連接到同一個表的WHERE子句

ID integer 
Name text 
isBalanced boolean 
redirects tinyint 

我想實現一個SELECT查詢,使我得到的所有行,其中isBalanced是false PLUS只有在isBalanced爲真的行的定義數量。我得到這個結果後,我需要得到最低數量redirects的單個結果。

我知道有辦法做到這一點,但我很難找出如何。這是我得到了什麼,直到知道

SELECT campaigns.id, campaigns.name, campaigns.isBalanced, campaigns.redirects 
FROM campaigns AS c 
INNER JOIN campaigns_2 AS c2 
WHERE c.isBalanced = 0 

但是我不能夠從C2組只選擇其中的一些,然後重新組合所有的過濾器,以獲得單一個具有最低數量的redirects

任何幫助將不勝感激。

+0

顯示一些示例數據和預期的結果。您不清楚您需要什麼。 –

+0

你的「定義」行數是多少?這些ID是否在表格中?一些標準?另外,不要用「我想要這些行,然後我想從這些行中獲得這個行」來思考。 SQL是基於集合的,你需要教你自己思考這些術語,而不是按順序處理術語。 –

+0

@TomH是和否,SQL也是一種順序。例如。當您從子查詢中進行選擇時,您可以將其視爲兩個步驟的過程。像IN或EXISTS(甚至是WHERE本身)也可以看作是一個連續的步驟。 – maraca

回答

3

這聽起來像你想union all,也許order bylimit

select c.* 
from campaigns c 
where c.isBalanced = 0 
union all 
(select c.* 
from campaigns c 
where c.isBalanced = 1 
limit ?? 
) 
order by redirects 
limit 1; 

的 「定義數字」 去哪裏了??是。

+0

你不需要'UNION ALL',只需'UNION' – butterFlyNick

+0

@Stan。 。 。 'UNION ALL'永遠比'UNION'更好,除非你特別想要去除重複值的開銷。 –

+0

這就是@GordonLinoff。非常感謝你。 – wiredmark