0

クエリがあります:

SELECT TOP 20 f.id_service AS f_id_service,
              f.id_city    AS f_id_city,
              f.name       AS f_name,
              f.address    AS f_address,
              f.business   AS f_business,
              f.web        AS f_web,
              f.phone      AS f_phone,
              f.id_firm    AS f_id_firm
FROM   Firm f
       LEFT JOIN Price p
         ON p.id_service = f.id_service
            AND p.id_city = f.id_city
            AND p.id_firm = f.id_firm
WHERE  f.name NOT IN (SELECT DISTINCT TOP 20 f.name
                      FROM   Firm f
                      WHERE  f.blocked = '0'
                             AND ( f.name LIKE 'АВТО%'
                                    OR f.phone LIKE 'АВТО%' )
                             AND ( f.phone != ''
                                    OR f.address != '' )
                             AND f.id_city = '73041'
                      ORDER  BY f.name ASC)
       AND f.dogovor = '1'
       AND f.blocked = '0'
       AND ( f.name LIKE 'АВТО%'
              OR f.phone LIKE 'АВТО%' )
       AND ( f.phone != ''
              OR f.address != '' )
       AND f.id_city = '73041

一意の f.name のみを選択するこのクエリを作成する方法を教えてください。

4

3 に答える 3

4

SELECTをこれに変更します

SELECT DISTINCT TOP 20 
    f.name as f_name
FROM ...

すべての列の値を持つことはできませんが、そのうちの 1 つだけを DISTINCT することはできません。意味がありません。

于 2013-05-21T15:32:36.020 に答える
1

DISTINCT次のキーワードを使用します。

SELECT DISTINCT
TOP 20 
f.id_service as f_id_service, 
f.id_city as f_id_city, 
f.name as f_name, 
f.address as f_address, 
f.business as f_business, 
f.web as f_web, 
f.phone as f_phone, 
f.id_firm as f_id_firm FROM Firm f 
left join Price p on p.id_service=f.id_service 
AND p.id_city=f.id_city AND p.id_firm=f.id_firm 
WHERE 
f.name NOT IN (
SELECT DISTINCT TOP 20 f.name FROM Firm f 
WHERE f.blocked='0' 
AND (f.name LIKE 'АВТО%' OR f.phone LIKE 'АВТО%') 
AND (f.phone !='' OR f.address != '') AND f.id_city='73041' 
ORDER BY f.name ASC ) AND f.dogovor='1' 
AND f.blocked='0' AND (f.name LIKE 'АВТО%' OR f.phone LIKE 'АВТО%') 
AND (f.phone !='' OR f.address != '') 
AND f.id_city='73041'

nameテーブル内で一意でない限り、すべての列が 1 つのテーブルからのものであるため、firmこのように DISTINCT を使用することはできません。重複の場合にどの会社を表示するかを決定し、それを達成するために複雑なクエリを作成する必要があります。

于 2013-05-21T15:33:03.093 に答える