List<MyTable> result = DSL.using(configuration())
.select()
.from(MY_TABLE)
.where(MY_TABLE.ID1.equal(pk_id1))
.and(MY_TABLE.ID2.equal(fk_id2))
.and(MY_TABLE.ID3.equal(fk_id3))
.orderBy(MY_TABLE.ID.asc())
.limit(limit)
.fetchInto(MY_TABLE)
.map(mapper());
Ich versuche, einige Code zu schreiben, meine Abfrage drei optionale ids ermöglicht zum Beispiel nehme ich die Abfrage schließlich möchteWie OPTIONAL zu schreiben, wo Klauseln in jOOQ
select * from my_table where ID1=5 and ID2=6 and ID3=7 .... etc
jedoch zu sein , ich möchte auch die Möglichkeit der Lage zu sein
select * from my_table where ID2=6 and ID3=7
auszuschließen ist eine der ID
oder
select * from my_table where ID3=7
Das Problem dabei ist, dass die erste „where“ Klausel gehört id ein und der Rest sind ands so, wenn ich eine if-Anweisung tat und ich entfernte das, wo dann würde ich nur mit
List<MyTable> result = DSL.using(configuration())
.select()
.from(MY_TABLE)
.and(MY_TABLE.ID2.equal(fk_id2))
.and(MY_TABLE.ID3.equal(fk_id3))
.orderBy(MY_TABLE.ID.asc())
.limit(limit)
.fetchInto(MY_TABLE)
.map(mapper());
gelassen werden und es würde nicht funktionieren.
Ich habe versucht, nach etwas wie where id = *
zu suchen, wo * essentialiell kein Filter ist, aber ich konnte nichts dergleichen finden.
Ich versuche es, aber aus irgendeinem Grunde Wahr-Bedingung wird immer als wahr ausgewertet, so dass meine Abfrage nur alles zurückgibt. Gibt es eine andere Bedingung zu verwenden? –
@LukeXu: Ja, das ist der Zweck der trueCondition ... :) Sind Sie sicher, dass Sie jeder neuen Bedingung die Variable zurück zuweisen? Die Operation and() erzeugt eine neue Bedingung. Es ändert nicht die linke Seite –
Ah okay, das macht Sinn, danke! –