簡體   English   中英

DISTINCT with as子句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM