[英]DISTINCT with as clause
$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";
這是什么問題?
無效使用DISTINCT關鍵字。 您只能將其應用於一組列,而不能應用於跳過其他列的特定列
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
通常,使用DISTINCT會導致性能下降。 DISTINCT實際上是用於刪除重復項的過濾器。 因此,在選擇多個列時,應將DISTINCT子句應用於完整集而不是單個列。 因此,您看到一個錯誤。
可以根據需求重寫查詢。 如果要過濾掉重復項,則可以應用行排名,也可以使用by和having子句來實現預期的結果。
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語法,它破壞了關系dabatabses的所有規則,不適用於任何其他RDBMS。
您可以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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.