(SQL)在查询中,如何使用仅有条件地需要JOIN的CASE语句?

保罗

我有一个主数据表,其中包含数据或当数据丢失时表示错误情况的代码。我需要:1)如果有效则显示数据,或者2)如果无效(这是一个错误代码),请显示该错误代码的可读版本

错误代码的人类可读形式来自另一个表,我正在与该表一起翻译该代码。

这是主表中的一些示例数据:

Table pub_k12.schools

school_name  | title1 | school_wide_title1 | total_students
-------------+--------+--------------------+---------------
School-A     | M      | M                  | 2300
School-B     | N      | N                  | -2
School-C     | M      | N                  | -1

代码转换表如下所示:

Table pub_k12.ref_school_field_data

data_code | data_string
----------+-------------
-1       | No Data
-2       | N/A
-9       | Bad Data
M        | No Data
N        | N/A

不幸的是,该数据格式无法更改。这就是我得到的。

这是我正在使用的查询:

SELECT s.school_name, stype.type_string, d1.data_string AS title1, d2.data_string AS school_title1,
CASE
 WHEN s.total_students::int < 0 THEN d3.data_string
 ELSE s.total_students
END "total_students"
FROM pub_k12.schools AS s
JOIN pub_k12.ref_school_type AS stype ON s.school_type = stype.type_code
JOIN pub_k12.ref_school_field_data AS d1 ON s.title1 = d1.data_code
JOIN pub_k12.ref_school_field_data AS d2 ON s.school_wide_title1 = d2.data_code
JOIN pub_k12.ref_school_field_data AS d3 ON s.total_students = d3.data_code;

(暂时忽略该stype,这是一种类似的将代码转换为可读的情况)

因此,我正在检查total_students是否大于0,在这种情况下,我将其完全显示。否则,我将执行JOIN来翻译代码。这是我运行查询时得到的结果(为清楚起见,我省略了type_string字段):

school_name  | title1  | school_title1 | total_students
-------------+---------+---------------+---------------
School-B     | N/A     | N/A           | N/A
School-C     | No Data | N/A           | No Data

如您所见,没有返回具有有效“ total_students”数据的A学校。只要total_students是错误代码,该查询就起作用,但是如果它是有效数据(如School-A),则d3上的最后一个JOIN不起作用,因为该数字(在这种情况下为2300)与错误代码表中的任何值。

有没有办法告诉它仅在满足CASE-WHEN条件的情况下才加入该联接?

谢谢!

CodeMonkey

进行联接“可选”,您将使用

LEFT OUTER JOIN

一个平原

JOIN

会从您的结果中过滤出不匹配的行

所以你可以尝试类似的东西

LEFT OUTER JOIN pub_k12.ref_school_field_data AS d3 ON s.total_students::int < 0 AND s.total_students = d3.data_code 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何有条件地使用SQL通配符?

来自分类Dev

使用CASE有条件地添加AND条件以进行查询

来自分类Dev

sqlite3如何有条件地更改联接表中的字段(使用CASE..END和JOIN一起使用)?

来自分类Dev

根据表数据有条件地执行SQL查询/语句

来自分类Dev

根据表数据有条件地执行SQL查询/语句

来自分类Dev

如何在Firestore查询中有条件地呈现“ Where”语句?

来自分类Dev

SQL语句有条件地选择相关记录

来自分类Dev

可以有条件地使用“ with”语句吗?

来自分类Dev

有条件地需要指令中的字段

来自分类Dev

SQL Server查询:有条件地获取总和

来自分类Dev

有条件地在原始postgresql函数中执行SQL语句吗?

来自分类Dev

有条件地查询Elasticsearch中的字段

来自分类Dev

如何在不使用CASE的情况下有条件地添加WHERE子句

来自分类Dev

带有条件语句的SAS SQL中的子查询

来自分类Dev

带有条件条件语句的总和在SQL中如何工作

来自分类Dev

如何有条件地从SQL Server选择记录

来自分类Dev

如何使hbs中的单选按钮有条件地使用addEventListener单击条件

来自分类Dev

如何有条件地调用sbt中的任务?

来自分类Dev

如何有条件地忽略GDB中的SIGTRAP?

来自分类Dev

如何有条件地在Ruby中重复循环?

来自分类Dev

如何有条件地在熊猫中删除行

来自分类Dev

如何有条件地忽略GDB中的SIGTRAP?

来自分类Dev

如何有条件地使用Test :: Simple?

来自分类Dev

如何使autoconf有条件地使用系统扩展?

来自分类Dev

如何有条件地正确使用jQuery replaceWith?

来自分类Dev

如何有条件地使用芹菜做任务?

来自分类Dev

如何使用Ansible有条件地复制文件?

来自分类Dev

如何使用vim有条件地替换数字

来自分类Dev

如何使用python有条件地修改列表

Related 相关文章

  1. 1

    如何有条件地使用SQL通配符?

  2. 2

    使用CASE有条件地添加AND条件以进行查询

  3. 3

    sqlite3如何有条件地更改联接表中的字段(使用CASE..END和JOIN一起使用)?

  4. 4

    根据表数据有条件地执行SQL查询/语句

  5. 5

    根据表数据有条件地执行SQL查询/语句

  6. 6

    如何在Firestore查询中有条件地呈现“ Where”语句?

  7. 7

    SQL语句有条件地选择相关记录

  8. 8

    可以有条件地使用“ with”语句吗?

  9. 9

    有条件地需要指令中的字段

  10. 10

    SQL Server查询:有条件地获取总和

  11. 11

    有条件地在原始postgresql函数中执行SQL语句吗?

  12. 12

    有条件地查询Elasticsearch中的字段

  13. 13

    如何在不使用CASE的情况下有条件地添加WHERE子句

  14. 14

    带有条件语句的SAS SQL中的子查询

  15. 15

    带有条件条件语句的总和在SQL中如何工作

  16. 16

    如何有条件地从SQL Server选择记录

  17. 17

    如何使hbs中的单选按钮有条件地使用addEventListener单击条件

  18. 18

    如何有条件地调用sbt中的任务?

  19. 19

    如何有条件地忽略GDB中的SIGTRAP?

  20. 20

    如何有条件地在Ruby中重复循环?

  21. 21

    如何有条件地在熊猫中删除行

  22. 22

    如何有条件地忽略GDB中的SIGTRAP?

  23. 23

    如何有条件地使用Test :: Simple?

  24. 24

    如何使autoconf有条件地使用系统扩展?

  25. 25

    如何有条件地正确使用jQuery replaceWith?

  26. 26

    如何有条件地使用芹菜做任务?

  27. 27

    如何使用Ansible有条件地复制文件?

  28. 28

    如何使用vim有条件地替换数字

  29. 29

    如何使用python有条件地修改列表

热门标签

归档