如果字符串与sql不匹配,如何返回0

时间:2020-09-11 20:13:30

标签: mysql sql select

我有这些表:

School
|---------------------|------------------|------------------|
|      SchoolID       |     City         |     State        |
|---------------------|------------------|------------------|
|          1          |       City1      |       State1     |
|---------------------|------------------|------------------|
|          2          |       City2      |       State2     |
|---------------------|------------------|------------------|
|          3          |       City3      |       State3     |
|---------------------|------------------|------------------|


Teacher
|---------------------|------------------|
|       Location      |     TeacherID    |
|---------------------|------------------|
|     City1 State1    |       123-A      |
|---------------------|------------------|
|     City2 State2    |       123-B      |
|---------------------|------------------|
|     City4 State4    |       123-C      |
|---------------------|------------------|

因此,我试图通过结合School表中的城市和州并检查哪个SchoolID链接到哪个TeacherID来返回这样的查询:

|---------------------|------------------|
|      TeacherID      |     SchoolID     |
|---------------------|------------------|
|       123-A         |       1          |
|---------------------|------------------|
|       123-B         |       2          |
|---------------------|------------------|
|       123-C         |       0          |
|---------------------|------------------|

到目前为止,这是我的代码

SELECT Teacher.TeacherID as TeacherID,
  (
    SELECT School.SchoolID
    FROM School
    WHERE CONCAT(School.City, ' ', School.State) = Teacher.Location
  ) AS SchoolID
FROM Teacher

但是,我得到的却是它:

|---------------------|------------------|
|      TeacherID      |     SchoolID     |
|---------------------|------------------|
|       123-A         |       1          |
|---------------------|------------------|
|       123-B         |       2          |
|---------------------|------------------|
|       123-C         |     null         |
|---------------------|------------------|

所以我的问题是,当找不到查询时,如何将null替换为0?我尝试使用:

SELECT IFNULL(School.SchoolID, 0)

但它只会返回相同的内容。

3 个答案:

答案 0 :(得分:1)

您需要将IFNULL应用于子选择的结果,而不是应用于子选择:

fun build(): String {
    query?.let {
        if (it.isNotEmpty()) {
            val encodedQuery = encode(query)
        }
    }
}

答案 1 :(得分:1)

您必须对查询进行封装

SELECT Teacher.TeacherID as TeacherID,
  IFNULL((
    SELECT School.SchoolID
    FROM School
    WHERE CONCAT(School.City, ' ', School.State) = Teacher.Location
  ),0) AS SchoolID
FROM Teacher;

答案 2 :(得分:1)

我认为使用left join

会更容易
select t.TeacherID, ifnull(s.SchoolID,0)
from Teacher t
left join School s on concat(s.City, ' ', s.State) = t.Location
相关问题