gpt4 book ai didi

sql - 选择行或默认行

转载 作者:行者123 更新时间:2023-12-02 09:36:00 25 4
gpt4 key购买 nike

我的表格中有以下几列NAMES:

|-------------|
| NAMES |
|-------------|
| NAME | LANG |
|-------------|

有 3 种类型的记录:lang = 'en'、lang = 'ua' 和 lang = chr(0) (默认语言)

现在我应该按 lang 选择名称,并满足下一个条件:

  1. 如果我按语言选择并且该语言的记录存在,那么它应该被退回

  2. 如果我按语言选择并且该语言的记录不存在,则默认应返回 NAME(其中 lang = chr(0))

我为此生成了下一个查询,但它看起来很糟糕

SELECT 
NAME
FROM NAMES WHERE
LANG = :lang
OR (NOT EXISTS(SELECT * FROM NAMES WHERE LANG = :lang) AND LANG = chr(0))

有没有更好的方法来实现这个? (使用的是Oracle DB)

示例数据:
1)

|--------------|
| NAMES |
|--------------|
| NAME | LANG |
|--------------|
| Ivan | ua |
| Kris | chr(0)|
|--------------|

en搜索返回Kris

2)

|--------------|
| NAMES |
|--------------|
| NAME | LANG |
|--------------|
| Ivan | ua |
| Kris | chr(0)|
| Mike | en |
|--------------|

en搜索返回Mike

3)

|--------------|
| NAMES |
|--------------|
| NAME | LANG |
|--------------|
| Ivan | ua |
|--------------|

en搜索不会返回任何内容

最佳答案

使用decode函数同样实现

WITH language as 
(select count(1) lang_count from names where lang=:lang)
SELECT
A.NAME
FROM NAMES a,language
where a.lang=decode(language.lang_count,0,chr(0),:lang);

更新1:-编辑答案以解决OP提到的第二种情况。结果与OP尝试的结果相同,但可能不太清楚

关于sql - 选择行或默认行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26218771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com