SimkisenMedlem sedan jan. 200358 inlägg
En till query, lite simplare dock.
id | text | key
------------------
1 | hejsan | null
2 | hello | 'en'
------------------
JPQL:
SELECT e.text FROM Entity e WHERE e.key = :key OR e.key IS NULL
ger båda raderna om key = 'en' (fel),
men ifall jag kör queryn för key = 'sv' så får jag bara en rad (rätt).
key = 'en' skall endast ge en rad också och i det fallet endast texten hello.
varje körning utav queryn skall endast ge en rad som svar (en text snutt). användningsområdet är default värde med möjlighet att overrida det för ens egna key.
Eftersom man bara hämtar ut en text så måste det inte vara JPQL utan vanlig native SQL funkar också men föredrar JPQL. anyway, har ni någon idé så är ni välkomna att komma med de.
Hare gött!
nitro2k01Medlem sedan aug. 20037 630 inlägg
SELECT e.text FROM Entity e WHERE e.key = :key XOR e.key IS NULL
Edit, vid närmare eftertanke kommer inte det där funka...
SimkisenMedlem sedan jan. 200358 inlägg
mm, med tanke på att båda jämförelserna kan vara true så failar det tyvärr..
Peter SMedlem sedan dec. 20025 484 inlägg
Jag hade kanske löst det med följande SQL:
SELECT e.text FROM Entity e WHERE e.key = key OR e.key IS NULL ORDER BY CASE WHEN e.text IS NOT NULL THEN 1 ELSE 2 END LIMIT 1
nitro2k01Medlem sedan aug. 20037 630 inlägg
Peter, jag satt och testade med något liknande, fast utan CASE. (Jag får för övrigt inte din case-kod att funka, ens när jag ändrar END till END CASE)
ORDER BY e.key DESC verkar funka bra.
SELECT e.text FROM `test_default` e
WHERE e.stringid = 0 AND (e.key = 'tr' OR e.key IS null)
ORDER BY e.key DESC
LIMIT 1;
Peter SMedlem sedan dec. 20025 484 inlägg
Frågan är vilket DBMS ts använder, det är inte säkert att CASE existerar i den aktuella dialekten. Är det MySQL fungerar CASE och framför allt i ORDER BY.
SimkisenMedlem sedan jan. 200358 inlägg
MySQL med Toplink är det men är inte säker på att CASE funkar med JPQL dock, har inte hunnit testa än.