2015-05-06 17 views
5

Bir tabloda benzersiz bir bileşik anahtar oluşturan üç alanım var.Bileşik anahtar, karşılaştırma

Dizinin eşleştiği 3 farklı dizide geçmek istiyorum.

custIds= [0,1,2] 
custLetters = [A,B,C] 
products = ["Cheese","lemons","Aubergine"] 

orada her üç satır döndürür bir sql deyimi, sadece in yoluyla birleştirilmesi için "yanlış pozitif" nedeniyle çalışmaz (bunlar var varsayarak) 'dir:

select * from mytable 
where custId in (custIds) 
and custLetters in (custLetters) 
and product in (products); 

veritabanı oracle ama hibernate hql üzerinden, yani ansi mümkünse tercih etti?

+0

İsterseniz hazırda bekletme kriterleri ile mümkündür. –

cevap

1

OT: SQL sorgusu muhtemelen yanlıştır. Olması gereken:

select * from mytable 
where (custId, custLetters, product) 
in ((0, 'A', 'Cheese'), 
(1, 'B', 'lemons'), 
(2, 'C', 'Aubergine')); 

Hazırda bekletme gibi bir sorgu oluşturabilir miyim kullanmıyorum. Ancak in, sadece birleşme ve ayırma için bir sözdizimi şekeridir.

+0

'Hazırda bekletme HQL'si, SQL sorgusu ile aynıdır. –

+1

@AfsunKhammadli benzer, ancak birçok farklılıklar var. Kesinlikle aynı değil. – NimChimpsky

+0

evet, siz gerçeksiniz. Benzer :-) –

1

Ondan sonra, tek bir birine diziler oluşturmak olabilir:

custIds= [0,1,2] 
custLetters = [A,B,C] 
products = ["Cheese","lemons","Aubergine"] 

Key=["0ACheese","1Blemons","2CAubergine"] 

select * from mytable 
where custId+custLetters+product in (Key); 
+0

Mevcut bir custid = 1, custletter = A ve ürünler = lemons varsa, bu nasıl çalışır? –

+1

@DanBrauck olmazdı, ama bu soru değil. Oldukça hacky bir çözüm, ama +1 – NimChimpsky

+0

çalışacaktı Hayır işe yaramaz çünkü 'custId + custLetters + product' geçersiz SQL'dir. Karakterler için birleştirme operatörü '' '' '' '' 'sayı işareti içindir. –

İlgili konular