在SQLite中查找表的差异时,JOIN子句是必不可少的吗?

yrdbyhpb  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(158)

我正在试着从两张table上找出ID的差异。我已经发布了表1和表2的样例数据。我正在考虑使用外部联接,但意识到这可能不是最好的主意。使用Join查找所需目标的简单方法是什么?在这种情况下,任何JOIN子句会有帮助吗?如果不是,解决这一问题的最佳(但简单)方法是什么?我很感谢大家在这方面的帮助!
表1:
Person|套餐ID|日期
-|-|
1|Y788|01-01-2020
2|T932|01-02-2020
3|W345|01-03-2020
3|S122|01-03-2020
4|F567|2020年01月04日
4|H767|2020年01月04日
表2:
Person|套餐ID|日期
-|-|
1|Y788|01-01-2020
2|T932|01-02-2020
3|W345、S122|01-03-2020
4|F567、H767|2020年01月04日
5|C555|01-05-2020
预期目标(编码后):
Person|套餐ID|日期
-|-|
5|C555|01-05-2020
代码:

SELECT Person, Package ID, Date
from table1, table2 
OUTER JOIN Person.table1 = Person.table2
Group by Date 
Order by Person;
nzrxty8p

nzrxty8p1#

在我的评论中,我已经提到,将数据保存在分隔列中不是一个好主意,因为这会使问题复杂化,并使查询速度变慢。请参阅Is storing a delimited list in a database column really that bad?
其余部分是基本的SQL
需要左联接才能获得表2中不在表1中的所有行。
WHERE子句只起作用,因为表2中的数据之间没有空格,所以如果有空格,则需要替换它们。

SELECT table2."Person", table2."Package ID", table2."Date"  
FROM table2 LEFT JOIN table1 ON  table1."Person" = table2."Person"
WHERE  (',' || table2."Package ID" || ',') NOT LIKE ('%,' || COALESCE(table1."Package ID",'') || ',%')
| Person | Package ID | Date |
| :-------|:-----------|:-----|
| 5 | C555 | 01-05-2020 |

fiddle

相关问题