2016-03-21 26 views
1

Ben MySQL tablo Ben TÜM satırları almak böylece isBalanced olduğu bir SELECT sorgusu ulaşmak çalışıyorum şuMySQL - İç fıkra

ID integer 
Name text 
isBalanced boolean 
redirects tinyint 

gibikampanyaları çağrıda NEREDE ile aynı tabloya katılmak false PLUS sadece isBalanced'un geçerli olduğu bir satır sayısı doğrudur. Bu sonucu aldıktan sonra en az redirects numarasına sahip olanı almam gerekiyor.

Bunu yapmanın bir yolu olduğunu biliyorum ama nasıl anlayacağımı anlamakta zorlanıyorum. Bu ben c2 kümesinden sadece bazıları seçin ve ardından redirects en düşük sayı ile tek tek almak için tüm filtreyi yeniden toplamak mümkün değilim Ancak bilmesi

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

kadar var yani.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır. Eğer union all istediğiniz gibi

+0

bazı örnek verileri ve beklenen sonucu gösterir.İhtiyacınız olanı netleştirmez. –

+0

"Tanımlanmış" satır sayısı nedir? Bu kimlikler bir tabloda mı? Bazı kriterler? Ayrıca, "Bu satırları istiyorum, sonra bunu bunlardan almak istiyorum" diye düşünmeyin. SQL set-tabanlıdır ve bu terimlerle düşünmeyi ve sıralı işlem terimlerinde düşünmeyi öğretmeniz gerekir. –

+0

@TomH evet ve hayır, SQL aynı zamanda sıralı. Örneğin. Bir alt sorgudan seçtiğinizde 2 adımlı bir süreç olarak görebilirsiniz. Ayrıca IN ya da EXISTS (hatta WHERE'nin kendisi) gibi şeyler sıralı bir adım olarak görülebilir. – maraca

cevap

3

Belki order by ve limit ile, sesler: ?? olduğu

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; 

"tanımlı numarası" gider.

+0

burada "UNION ALL" 'a ihtiyacınız yok, sadece "UNION" – butterFlyNick

+0

@Stan. . . Özellikle yinelenen değerlerin kaldırılmasının üstesinden gelmek istemediğiniz sürece UNION ALL, her zaman "UNION" için tercih edilir. –

+0

Bu, @GordonLinoff. Çok teşekkür ederim. – wiredmark