2016-03-21 28 views
1

私はMySQLのテーブルは私がisBalancedがあるすべての行を取得するように、SELECTクエリを達成しようとしています次のMySQL - インナー句

ID integer 
Name text 
isBalanced boolean 
redirects tinyint 

ようキャンペーンを求めているWHEREと同じテーブルに参加false isBalancedが真である行の定義済みの数だけを追加します。私がこの結果を得た後、最も低い数字のredirectsを持つ単一のものを得る必要があります。

私はそれを行う方法があることを知っていますが、私はどのように把握するのに苦労しています。これは私が私がC2セットからちょうどそれらのいくつかを選択し、redirectsの最低数を持つ単一のものを得るために、すべてのフィルタを再グループ化することはできませんよしかしノウハウ

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

まで得たものです。

ご協力いただければ幸いです。あなたがunion allをしたいよう

+0

いくつかのサンプルデータと期待される結果が表示されます。必要なものが明確ではありません。 –

+0

"定義された"数の行は何ですか?これらのIDはテーブルにありますか?いくつかの基準?また、「私はこれらの行がほしいと思うのではなく、私はこれらの行をそれらから取得したい」という観点から考えてはいけません。 SQLはセットベースであり、逐次処理の用語ではなく、それらの用語で考えるよう教える必要があります。 –

+0

@TomHはい、いいえ、SQLも一種のシーケンシャルです。例えば。サブクエリから選択すると、2段階のプロセスとして見ることができます。また、INやEXISTS(またはそれ自身でさえ)のようなものは、連続したステップとして見ることができます。 – maraca

答えて

3

それはおそらく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