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)
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.