我有像这样的SQL语句
SELECT DISTINCT results_sp_08.material_number FROM results_sp_08
INNER JOIN courses ON results_sp_08.material_number = courses.material_number
INNER JOIN users ON results_sp_08.id = users.id
AND results_sp_08.doctor = 'xx260'
我需要DISTINCT的替代方法在MySQL版本中使用它:4.1.22?
还有另一种方式或伎俩吗?
答案 0 :(得分:3)
DISTINCT
在功能上等同于GROUP BY <all the columns in your select list>
答案 1 :(得分:2)
与Joel一样,您最好的选择是添加GROUP BY子句。在你的情况下
GROUP BY results_sp_08.material_number
答案 2 :(得分:0)
我通常在这些上使用双连接策略:
JOIN tablex AS x1 ON whatever
LEFT JOIN tablex AS x2 ON whatever
AND x2.pkid < x1.pkid AND x2.somefield IS NULL
保证我在所有联接中最多获得1条记录。
答案 3 :(得分:0)
我过去通过在WHERE中添加更多子句成功地消除了DISTINCT。您需要查看JOIN中的哪些字段导致多行返回。子查询也可以起作用。
答案 4 :(得分:0)
我需要DISTINCT选择非重复元素,例如我在一列中包含这些值(EE432 - EE432 - EE352 - EE352)我的sql语句将只返回EE432和EE352。
所以我需要替代方法来做到这一点
答案 5 :(得分:0)
在不知道表格结构的情况下,很难说清楚。 你需要用语言说出你想要做的事情。
假设result_sp_08仅包含唯一的“material_number”,并且 您正在尝试获取在课程和用户表中至少有一行的所有唯一material_number:
SELECT results\_sp\_08.material\_number
FROM results\_sp\_08
WHERE results\_sp\_08.doctor = 'xx260' and
EXISTS(select * from courses
where results\_sp\_08.material\_number = courses.material\_number) and
EXISTS(select * from users
where results\_sp\_08.id = users.id)
请参阅文档:http://dev.mysql.com/doc/refman/4.1/en/exists-and-not-exists-subqueries.html
答案 6 :(得分:0)
我认为我们在这里遗漏了一些重要信息。 DISTINCT在mysql 4.1.22中完全有效,那你为什么还需要另一种选择呢?
material_number列是否包含文字字符串“EE432 - EE432 - EE352 - EE352”,或者您的查询是否返回4行?如果它是一个字符串,那么没有多少SQL可以帮助你。
答案 7 :(得分:0)
SELECT results_sp_08.material_number FROM results_sp_08
INNER JOIN courses AS c ON
results_sp_08.material_number = c.material_number
INNER JOIN users AS u ON results_sp_08.id = u.id
AND results_sp_08.doctor = 'xx260'
GROUP BY results_sp_08.material_number.
添加了group by子句,并删除了不重复的。最佳实践之一:使用JOIN时始终使用别名。