在 SQL Server 中获取重复行
Posted
技术标签:
【中文标题】在 SQL Server 中获取重复行【英文标题】:Getting duplicate rows in SQL Server 【发布时间】:2021-11-04 15:19:42 【问题描述】:屏幕截图包含 3 个相互关联的表
第二张截图显示了 SQL 查询和得到的结果:
查询:
SELECT DISTINCT
t.topic_id
, t.topic_name
, t.topic_cover
, t.topic_viewers
, t1.subscribe_id
FROM
tbltopic t
INNER JOIN
tblsubject_grade tg ON (t.subject_garde_id = tg.subject_garde_id)
INNER JOIN
tblsubcription t1 ON (tg.subject_garde_id = t1.subject_garde_id)
【问题讨论】:
那么问题到底是什么? 应该只显示 2 行而不是 4 行 抱歉,您需要清楚地查看您的屏幕打印并弄清楚这一点。 是的,他们说应该只有 2 行;他们没有告诉我们是哪一个,@DougCoats。 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。 【参考方案1】:真正的问题是您在几个表中有多个 JOIN 条件
检查此图像:
您会看到 tblsubject_grade 表连接到其他表。
您的查询应该是:
if OBJECT_ID('tempdb..#topic') IS NOT NULL DROP TABLE #topic
if OBJECT_ID('tempdb..#subjGrade') IS NOT NULL DROP TABLE #subjGrade;
if OBJECT_ID('tempdb..#subscription') IS NOT NULL DROP TABLE #subscription;
CREATE TABLE #topic (topic_id int, topic_name varchar(20), topic_cover varchar(20), topic_viewers int, teacher_id int, subject_garde_id int);
CREATE TABLE #subjGrade (subject_garde_id INT, grade_id INT, subject_id INT);
CREATE TABLE #subscription (subscribe_id INT, sub_status INT, sub_date date, student_id INT, archive_status INT, teacher_id int, subject_garde_id int);
INSERT INTO #topic (topic_id, topic_name, topic_cover, topic_viewers, teacher_id, subject_garde_id)
VALUES
(4, 'numbers', 'somestring', 0,2,1),
(6, 'shapes', 'somestring', 0,9,1),
(7, 'story time', 'somestring', 0, 2, 5)
INSERT INTO #subjGrade (subject_garde_id , grade_id , subject_id)
VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 2, 1),
(5, 2, 2),
(6, 2, 3),
(7, 2, 4),
(8, 3, 1)
INSERT INTO #subscription (subscribe_id, sub_status, sub_date, student_id, archive_status , teacher_id , subject_garde_id)
VALUES
(2, 1, '9-7-2021', 1,0,9,1),
(3, 1, '9-7-2021', 1,0,2,1)
SELECT
t.topic_id
, t.topic_name
, t.topic_cover
, t.topic_viewers
, t1.subscribe_id
FROM #topic t
INNER JOIN #subjGrade tg ON t.subject_garde_id = tg.subject_garde_id
INNER JOIN #subscription t1 ON
tg.subject_garde_id = t1.subject_garde_id
AND t1.subject_garde_id = t.subject_garde_id
AND t.teacher_id = t1.teacher_id
【讨论】:
还是一样的输出 @MTB 我错过了加入,再试一次 是的,您需要删除此行 AND tl.student_id = tg.student_id @MTB 我正忙于在本地制作数据集以进行测试 - 是的,我弄乱了 student_id 的 subject_id,你抓住了它。请给一个人一个正确的答案和赞成票以上是关于在 SQL Server 中获取重复行的主要内容,如果未能解决你的问题,请参考以下文章