如何根据MySQL中不同列的值删除重复记录?

Per*_*ino 2 mysql sql select join duplicates

我有几个SQL表的查询:

在此输入图像描述

我想从查询结果中过滤重复项,其中列id具有多个相同的值.在这个例子中,我们可以看到有两个id = 1(名字Miriam).在这里,我想保留pcs = 2的记录,Miriam的第二条记录我不想在查询结果中使用它.在过滤的情况下,密钥将基于pcs列的值.

在此输入图像描述

我怎样才能做到这一点?我的查询是:

SELECT 
`periode_class_members`.`id`, 
`classes`.`id` AS `class`, 
`periode_class_members`.`periode`, 
`user`.`firstname` AS `firstname`, 
`user`.`lastname` AS `lastname`, 
`periode_class_members`.`status`,
`periode_class_subjects`.`id` AS pcs 
FROM `periode_class_subject_members` 
LEFT JOIN `periode_class_members` 
ON periode_class_subject_members.periode_class_member = periode_class_members.id 
RIGHT JOIN `periode_class_subjects` 
ON periode_class_subject_members.periode_class_subject = periode_class_subjects.id 
JOIN `classes` 
ON periode_class_members.class = classes.id 
LEFT JOIN `user` 
ON periode_class_members.user = user.id
where `classes`.`id` = 1;
Run Code Online (Sandbox Code Playgroud)

Ste*_*ers 5

SQL - 没有视图

SELECT *
FROM 
(<<your query>>) AS sub1
WHERE NOT EXISTS
 (SELECT *
  FROM
  (<<your query>>) AS sub2
  WHERE id = sub1.id
    AND pcs <> sub1.pcs
    AND pcs = 2);
Run Code Online (Sandbox Code Playgroud)

... <<your query>>插入两个地方 - 为简洁省略.

SQL - 带有视图

与上面类似,但查询只需要插入一次:

CREATE VIEW vw_unfiltered_query AS
<<your query>>;

CREATE VIEW vw_filtered_query AS
SELECT *
FROM vw_unfiltered_query AS sub1
WHERE NOT EXISTS
 (SELECT *
  FROM vw_unfiltered_query AS sub2
  WHERE id = sub1.id
    AND pcs <> sub1.pcs
    AND pcs = 2);
Run Code Online (Sandbox Code Playgroud)

演示

以下演示使用上述两种方法显示过滤前后的结果.(为简单起见,它使用SELECT预先填充的表中的简单语句代替您的查询.)

http://rextester.com/MXZDDJ39435

说明

WHERE NOT EXISTS,只有行包括其中没有具有相同的另一行确保id,但不同的pcs值,该值等于2.