2
$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 AS img_id之前添加 DISTINCT ?

当我像下面那样做时它显示错误

$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";

有什么问题吗?

4

5 回答 5

2

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

于 2013-09-16T10:02:38.597 回答
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
于 2013-09-16T10:05:33.547 回答
0

通常,使用 DISTINCT 会导致性能下降。DISTINCT 实际上是一个删除重复项的过滤器。因此,在选择多个列时,应将 DISTINCT 子句应用于完整集而不是单个列。因此,您会看到一个错误。

可以根据需求重写查询。如果您想过滤掉重复项,那么您可以应用行排名,或者按分组和有子句来达到预期的结果。

于 2013-09-16T09:59:46.563 回答
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。

于 2013-09-16T10:03:56.907 回答
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。

于 2013-09-16T10:04:10.353 回答