【发布时间】:2018-03-18 16:57:48
【问题描述】:
我有几个 SQL 表的查询:
我想从列 id 具有多个相同值的查询结果中过滤重复项。在此示例中,我们可以看到 (firstname Miriam) 有两个 id = 1。这里我想保留 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;
【问题讨论】:
-
对于其他ID,您想保留哪些电脑?为此,您需要指定要保留的规则。
-
不重复pcs不同
-
"我有一个 SQL 表"??您的查询有 5 个表,结合了非常笨拙的外连接组合。
-
如果逻辑由程序而不是数据库完成,程序将不得不循环遍历不同的 id 值,对于每个 id 获取该 id 的所有记录,循环遍历记录直到它有决定了它想要对哪条记录进行操作,然后用那条记录做它的事情。
-
“逻辑是由程序完成的,而不是由数据库完成的。” 所以 DBMS 忽略了规则。 DBMS 怎么可能删除不需要的记录,却不知道哪些需要哪些不需要?这是没有意义的。似乎 Binarus 已经给了你上面唯一正确的答案。想想这个。由于显而易见的原因,您请求的内容无法完成,因此您可能希望完全删除您的请求。
标签: mysql sql select join duplicates