sql实现,a表含有全部id,b表含有部分id,去重获得b表中不含有id的那部分数据
时间: 2024-03-02 15:51:19 浏览: 8
可以使用 SQL 中的 `LEFT JOIN` 和 `IS NULL` 来实现该功能。具体的 SQL 语句如下:
```sql
SELECT b.*
FROM b
LEFT JOIN a ON a.id = b.id
WHERE a.id IS NULL;
```
这个语句中,`LEFT JOIN` 将 `b` 表和 `a` 表进行联接,关联条件为 `a.id = b.id`。由于 `LEFT JOIN` 会保留 `b` 表中的所有记录,所以即使 `b` 表中的某些记录在 `a` 表中不存在,也会被包含在联接结果中。然后我们通过 `WHERE a.id IS NULL` 来筛选出在 `a` 表中不存在的记录,即为我们需要的结果。
相关问题
有三张表a/b/c,使用sql合并三张表并分别取出表a/b/c的user_id的去重个数
您好!这个问题可以通过以下SQL语句来合并三张表并分别取出表a/b/c的user_id的去重个数:
```sql
SELECT COUNT(DISTINCT a.user_id) AS a_user_count,
COUNT(DISTINCT b.user_id) AS b_user_count,
COUNT(DISTINCT c.user_id) AS c_user_count
FROM a
JOIN b ON a.user_id = b.user_id
JOIN c ON a.user_id = c.user_id
```
这个SQL语句可以将a、b、c三张表按照user_id进行关联,然后分别计算出各个表的user_id的去重个数,最终返回一个包含这些个数的结果集。
希望这个回答能够帮到您!如果您有其他问题,欢迎随时问我哦~
SQL SERVER 多表联查数据去重
SQL SERVER 多表联查数据去重可以通过使用复杂表连接查询实现。具体步骤如下:
1. 单独查出需要关联的多个表,并根据关联主键进行分组排序。
2. 将这些表关联成一个临时表。
3. 最后将临时表与主表进行关联,去除重复数据。
具体实现可以参考以下SQL语句:
with Patent as (select row_number() over(partition by StProjecZtbId order by StProjecZtbId) rowNumber,StProjecZtbId,PatentName from STPatent),
Thesis as(select row_number() over(partition by StProjecZtbId order by StProjecZtbId) rowNumber,StProjecZtbId,ThesisName from STThesis),
Other as(select row_number() over(partition by StProjecZtbId order by StProjecZtbId) rowNumber,StProjecZtbId,[Name] from STOther)
select st.Id,st.StProjectName,T.* from StProjec st
left join (select isnull(Patent.StProjecZtbId,isnull(Thesis.StProjecZtbId,Other.StProjecZtbId)) StProjecZtbId,PatentName,ThesisName,Other.[Name]
from Patent full join Thesis on Patent.rowNumber = Thesis.rowNumber and Patent.StProjecZtbId = Thesis.StProjecZtbId
full join Other on Patent.rowNumber = Other.rowNumber and Patent.StProjecZtbId = Other.StProjecZtbId) T on st.Id=T.StProjecZtbId
where 1=1 order by StProjecZtbId