带有as子句的DISTINCT

时间:2013-09-16 09:49:34

标签: mysql sql distinct

$query="SELECT a.pk_i_id,a.i_price,b.s_title,c.pk_i_id AS img_id,c.s_extension,d.s_city,d.s_city_area from zl_t_item a, zl_t_item_description b, zl_t_item_resource c, zl_t_item_location d where a.fk_i_category_id=$cat_id and a.pk_i_id=b.fk_i_item_id and a.pk_i_id=c.fk_i_item_id and a.pk_i_id=d.fk_i_item_id ORDER BY a.dt_pub_date DESC";

在上面的查询中,我需要在此 c.pk_i_id之前添加DISTINCT AS img_id ??

当我在下面这样做时显示错误

$query="SELECT a.pk_i_id,a.i_price,b.s_title,DISTINCT c.pk_i_id AS img_id,c.s_extension,d.s_city,d.s_city_area from zl_t_item a, zl_t_item_description b, zl_t_item_resource c, zl_t_item_location d where a.fk_i_category_id=$cat_id and a.pk_i_id=b.fk_i_item_id and a.pk_i_id=c.fk_i_item_id and a.pk_i_id=d.fk_i_item_id ORDER BY a.dt_pub_date DESC";

它有什么问题?。

5 个答案:

答案 0 :(得分:1)

无效使用DISTINCT关键字。您只能将其应用于一组列,而不能用于跳过其他列的特定列

答案 1 :(得分:1)

DISTINCT应该在SELECT之后立即应用于您无法在列之间使用DISTINCT的列或列集

SELECT  DISTINCT c.pk_i_id AS img_id, 
a.pk_i_id,a.i_price,b.s_title,c.s_extension,d.s_city,d.s_city_area 
from zl_t_item a, zl_t_item_description b, zl_t_item_resource c,
 zl_t_item_location d where a.fk_i_category_id=$cat_id 
and a.pk_i_id=b.fk_i_item_id and a.pk_i_id=c.fk_i_item_id 
and a.pk_i_id=d.fk_i_item_id ORDER BY a.dt_pub_date DESC

答案 2 :(得分:0)

通常,使用DISTINCT是性能杀戮。 DISTINCT实际上是一个删除重复项的过滤器。 因此,在选择多个列时,DISTINCT子句应该应用于整个集合而不是单个列。 因此,您看到了一个错误。

可以根据要求重写查询。如果要过滤掉重复项,则可以应用行排名,或者分组依据和having子句来实现预期结果。

答案 3 :(得分:0)

DISTINCT始终适用于所有列,您可能必须在SELECT之后直接放置。

在MySQL中,每个img_id只有一行的简单方法,添加GROUP BY img_id

SELECT
  a.pk_i_id
  ,a.i_price
  ,b.s_title
  ,c.pk_i_id AS img_id
  ,c.s_extension
  ,d.s_city
  ,d.s_city_area
from
  zl_t_item a
  ,zl_t_item_description b
  ,zl_t_item_resource c
  ,zl_t_item_location d
where
  a.fk_i_category_id = $cat_id
  and a.pk_i_id = b.fk_i_item_id
  and a.pk_i_id = c.fk_i_item_id
  and a.pk_i_id = d.fk_i_item_id
GROUP BY img_id
ORDER BY
  a.dt_pub_date DESC

当然这是一种专有的MySQL语法,它违反了关系数据库的所有规则,不适用于任何其他RDBMS。

答案 4 :(得分:0)

您可以拥有SELECT DISTINCT <columns>SELECT <columns>(实际默认为SELECT ALL <columns>。)您无法将DISTINCT应用于特定列。

所以,:

SELECT a.pk_i_id ,a.i_price, b.s_title, DISTINCT c.pk_i_id ...

是无效的SQL。