gpt4 book ai didi

mysql - 如何选择另一个表中不存在的行

转载 作者:可可西里 更新时间:2023-11-01 08:04:09 24 4
gpt4 key购买 nike

我想创建一个报告。

我有 2 个表:

  1. 学生名单
  2. 交易列表

这是那些表中包含的行

学生名单

Stud_ID | Name
1 | Cat
2 | Dog
3 | Rabbit

交易列表

Trans_ID | Stud_ID | Payment_Month
1 | 1 | January
2 | 1 | February

现在我想从 student_list 中选择存在于 transaction_list 中的数据,并将其与 student_list 中不存在于 transaction_list 中的数据合并,其中 Payment_Month = "January"

我试过这个查询

SELECT Name, Trans_ID, Payment_Month
FROM student_list s
LEFT JOIN transaction_list t
ON t.Stud_ID = s.Stud_ID
WHERE Payment_Month = "January"
UNION
SELECT Name, Trans_ID, Payment_Month
FROM student_list s
LEFT JOIN transaction_list t
ON t.Stud_ID = s.Stud_ID
WHERE t.Stud_ID IS NULL

我明白了

Name   | Trans_ID | Payment_Month
Cat | 1 | January
Dog | - | -
Rabbit | - | -

但是当我将查询中的 Payment_Month 值更改为“March”时,我得到了这个

Name   | Trans_ID | Payment_Month
Dog | - | -
Rabbit | - | -

不是我想要的,因为我喜欢这个

Name   | Trans_ID | Payment_Month
Cat | - | -
Dog | - | -
Rabbit | - | -

无论如何我可以得到那个吗?

最佳答案

SELECT Name, Trans_ID, Payment_Month
FROM student_list s
LEFT JOIN transaction_list t
ON (t.Stud_ID = s.Stud_ID AND Payment_Month = "January")
UNION
SELECT Name, Trans_ID, Payment_Month
FROM student_list s
LEFT JOIN transaction_list t
ON t.Stud_ID = s.Stud_ID
WHERE t.Stud_ID IS NULL

试试看。通过使用 WHERE,您可以根据查询提供的实际结果进行过滤,因此,如果您的 LEFT JOIN 提供 null 但您正在过滤该列,则该行将从结果集中删除。

通过将月份放入 JOIN 条件中,它只会在此列(在 JOIN 添加的列上)返回 null 并将该行保留在结果集中。

关于mysql - 如何选择另一个表中不存在的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38157592/

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