我正在使用SQL Server 2014
,我有一个简单的T-SQL
查询(如下所示)及其相应的输出。
use mydatabase
select *
from Table1
where ID in (101, 102, 103)
输出如下(表1中不存在ID 102):
ID Age
101 46
103 50
我希望输出如下:
ID Age
101 46
102 0
103 50
如果查找表中的ID不匹配,则输出省略这些ID。如何更改T-SQL
查询以确保输出不匹配的ID但是为零。
答案 0 :(得分:0)
如果没有包含您正在查找的值的表格,那么您可以使用join
执行该操作,并在coalesce()
或{{的帮助下将错配值替换为0 1}}功能
isnull()
结果:
select a.id, coalesce(t.age, 0) [Age] from <table> t
right join (
values (101), (102), (103)
) a(id) on a.id = t.id
答案 1 :(得分:0)
如果您有两个或更多表,并且如果在一个表中找不到匹配项,则希望显示一些默认值,那么您可以在SQL中使用外部联接。
例如:
我有2个表TableA和TableB。
当我进行内部联接时,我将获得两个表中都有匹配的记录。假设我需要从两个表中选择id 1,2和3,即使TableB中不存在一个id,我希望记录为NULL,然后我可以使用这个
func User(w http.ResponseWriter, r *http.Request) {
idUser := r.URL.Query().Get("id_user")
phoneNumber := r.URL.Query().Get("phone_number")
var user User
id, err := strconv.Atoi(idUser)
if err != nil {
fmt.Println("error converting string to int")
return
}
user.IDUser = id
user.PhoneNumber = phoneNumber
respBody, _ := json.Marshal(user)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write(respBody)
}
如果tableB
中没有id的匹配记录,则Age将显示为0答案 2 :(得分:0)
if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
fmt.Println("error decoding api payload")
return
}