En till smart query

Databaser & SQL

6 svar · 551 visningar · startad av Simkisen

Medlem sedan jan. 200357 inlägg
Trådstart#1

En till query, lite simplare dock.

id | text | key

Medlem sedan aug. 20039 340 inlägg
#2
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...

Medlem sedan jan. 200357 inlägg
#3

mm, med tanke på att båda jämförelserna kan vara true så failar det tyvärr..

Medlem sedan dec. 20025 483 inlägg
#4

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
Medlem sedan aug. 20039 340 inlägg
#5

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;
Medlem sedan dec. 20025 483 inlägg
#6

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.

Medlem sedan jan. 200357 inlägg
#7

MySQL med Toplink är det men är inte säker på att CASE funkar med JPQL dock, har inte hunnit testa än.

252 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)