$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";
它有什么问题?。
答案 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。