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());
Próbuję napisać kod, który pozwoli moje zapytanie do podjęcia trzech opcjonalnych identyfikatorów na przykład chciałbym kwerendy ostatecznieJak napisać opcjonalny gdzie klauzule JOOQ
select * from my_table where ID1=5 and ID2=6 and ID3=7 .... etc
jednak , chciałbym również możliwość bycia w stanie wykluczyć jakiekolwiek z identyfikatora
select * from my_table where ID2=6 and ID3=7
lub
select * from my_table where ID3=7
Problem polega na tym, że pierwszy „gdzie” klauzula należący do id jednym i reszta ANDS więc jeśli zrobiłem if i usunąłem Gdzie więc będę tylko z lewej
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());
i to by nie działało.
Próbowałem szukać czegoś takiego jak where id = *
gdzie * zasadniczo nie ma filtra, ale nie mogłem znaleźć czegoś takiego.
Próbuję go ale z jakiegoś powodu trueCondition zawsze zwraca wartość true, więc moje zapytanie zwróci wszystko. Czy jest inny warunek do użycia? –
@LukeXu: Tak, to jest celem trueCondition ... :) czy jesteś pewien, że przypisujesz każdą nową sytuację do zmiennej? Operacja and() tworzy nowy warunek. To nie zmienia lewej strony. –
Ah w porządku, to ma sens, dzięki! –