2015-05-06 14 views
5

Ho tre campi che formano una chiave composita univoca su una tabella.Chiave composta, in confronto

Voglio passare in 3 diversi array, dove l'indice corrisponde.

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

c'è un'istruzione SQL che restituirà tutte le tre file (ammesso che esista), solo unendo via in non funzionerà a causa di "falsi positivi": oracle

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

banca dati , ma tramite hibernate hql, quindi ansi preferito se possibile?

+0

È possibile con "criteri di ibernazione" se lo si desidera. –

risposta

1

OT: la query SQL è probabilmente sbagliato. Dovrebbe essere:

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

Non sto utilizzando se Hibernate può generare una tale query. Ma in è solo uno zucchero di sintassi per le congiunzioni e le disgiunzioni.

+0

'Hibernate HQL' è uguale alla query SQL. –

+1

@AfsunKhammadli è simile, ma ci sono molte differenze. Non è sicuramente lo stesso. – NimChimpsky

+0

sì, sei vero. Simile :-) –

1

Si potrebbe comporre gli array in una sola, dopo di che:

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

Come funzionerebbe se esistesse un record di custode esistente = 1, custletter = A e prodotti = limoni? –

+1

@DanBrauck non lo farebbe, ma non è questa la domanda. Una soluzione piuttosto hacky, ma funzionerebbe +1 – NimChimpsky

+0

No, non funzionerebbe perché 'custId + custLetters + product' non è SQL valido. L'operatore di concatenazione per i caratteri è '||' il segno '+' è per i numeri. –

Problemi correlati