I have the below columns in my table NAMES:
|-------------|
| NAMES |
|-------------|
| NAME | LANG |
|-------------|
There are 3 types of records: lang = 'en', lang = 'ua' and lang = chr(0) (default lang)
Now I should select names by lang with next condition:
If I select by lang and record for this lang exists then it should be returned
If I select by lang and record for this lang is absent then default NAME should be returned (where lang = chr(0))
I generated next query for this, but it looks awful
SELECT
NAME
FROM NAMES WHERE
LANG = :lang
OR (NOT EXISTS(SELECT * FROM NAMES WHERE LANG = :lang) AND LANG = chr(0))
Is there any better way to implement this? (Oracle DB is used)
Sample data:
1)
|--------------|
| NAMES |
|--------------|
| NAME | LANG |
|--------------|
| Ivan | ua |
| Kris | chr(0)|
|--------------|
Search by en returns Kris
2)
|--------------|
| NAMES |
|--------------|
| NAME | LANG |
|--------------|
| Ivan | ua |
| Kris | chr(0)|
| Mike | en |
|--------------|
Search by en returns Mike
3)
|--------------|
| NAMES |
|--------------|
| NAME | LANG |
|--------------|
| Ivan | ua |
|--------------|
Search by en returns nothing