mysql - 去掉表 1 的部分并显示表 2 的部分

标签 mysql teradata

我在 Teradata 上工作时遇到 SQL 问题。 我有 2 张表,分别称为类(class)(表 1)和成绩(表 2)。 从表 1 中,我想从特定类(class)、一年级等中提取一组特定的学生,并显示一些附加数据。 对于表 1 中的数据,我想添加特定科目的成绩,但并非所有学生都选修该科目,对于他们,我希望得到 NULL 结果。

我知道如何仅获取参加该科目的学生的数据,但我却错过了其他学生。

SELECT
a.Name
a.Age
b.Subject
b.grade

FROM  Table1 a                                 
LEFT JOIN Table2  b ON a.name=b.name

WHERE a.group in ('1')
AND b.subject in ('2')
;

另外,我知道科目 1=英语,2=历史,3=数学,所以我希望将数字切换为实际姓名。

部分数据:

Table1                  Table2      
Group   Name    Age         Name    Subject Grade
1       Anna    12          Anna    1       A
1       Bengt   11          Anna    2       B
1       Cesar   12          Bengt   1       A
2       David   12          Bengt   2       A
2       Eric    13          Bengt   3       C
2       Filip   12          Cesar   1       C
3       Gustav  14          Cesar   3       C
3       Hugo    14          Cesar   4       B
3       Inga    14          Cesar   5       A

我得到了什么:

Name    Age Subject Grade
Anna    12  2       B
Bengt   11  2       A

我想要什么:

Name    Age Subject Grade
Anna    12  History B
Bengt   11  History A
Cesar   12  

拜托,谁能帮帮我。

最终 SQL

SELECT
    DISTINCT(a.Name)
    a.Age
    (CASE When b.scan_type_cd in ('2') then 'History' else NULL END) AS History,
    b.grade

    FROM  Table1 a                                 
    LEFT JOIN Table2  b ON a.name=b.name AND b.scan_type_cd in ('2')

    WHERE a.group in ('1')
    ;

最佳答案

您需要创建一个名为“主题”的单独表,然后加入“主题/ID”。这样您就可以用名称替换数字。或者您可以使用IF(b.subject = 1,'English',IF(b.subject = 2,'History',IF(b.subject = 3,'Science')))但这不太适合很多科目。

WHERE位是你的问题。您需要将其放在 LEFT JOIN 上,以便您的查询将显示如下内容:

ON a.name = b.name AND subject = 2

尝试一下...

通过限制 JOIN,您仍然返回其他行 - WHERE 发生在连接发生之后,因此您看不到所有学生。

关于mysql - 去掉表 1 的部分并显示表 2 的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48318740/

相关文章:

php - 通过全选获取多个复选框值并将值更新到数据库中

php - 为什么我的 PHP 代码不起作用?

前一时期分区的 SQL 总和

sql - 在 Teradata 中使用 COLLECT STATISTICS

sql - Teradata SQL : insert random data for testing into Table

php - PHP根据列条件处理MySQL查询

php - 如何在mysql中使用多个group by with inner join

python - 将 CSV Scrape 转换为 mySQL 插入

sql - 在日期中查找简单的频率模式

timestamp - 使用 SQOOP 将日期时间导出到 TeraData 时出现问题