75

次のような3列のテーブルがあります。

+------------+---------------+-------+  
| Country_id | country_title | State |  
+------------+---------------+-------+    

このテーブルには多くのレコードがあります。持っているものもあれば、持ってstateいないものもあります。ここで、次のレコードを想像してください。

1 | Canada  | Alberta  
2 |  Canada | British  Columbia  
3 | Canada  | Manitoba  
4 | China   |

重複のない国名が必要です。実際、私は彼らのidとが必要titleです、これを作るのに最適なSQLコマンドは何ですか? 以下のフォームで使用DISTINCTしましたが、適切な結果が得られませんでした。

SELECT DISTINCT title,id FROM tbl_countries ORDER BY title

私の望む結果は次のようなものです:

1, Canada  
4, China
4

9 に答える 9

112

これを試して:

SELECT MIN(id) AS id, title
FROM tbl_countries
GROUP BY title
于 2012-09-02T19:58:10.077 に答える
47

DISTINCTキーワード
です私にとってあなたの質問は正しいです

最初にこれをやってみてください

SELECT DISTINCT title,id FROM tbl_countries

後で注文して試すことができます。

于 2012-09-02T19:47:59.367 に答える
18

キーワードを使用DISTINCTするには、次のように使用できます。

SELECT DISTINCT 
    (SELECT min(ti.Country_id) 
     FROM tbl_countries ti 
     WHERE t.country_title = ti.country_title) As Country_id
    , country_title
FROM 
    tbl_countries t

を使用ROW_NUMBER()するには、次のように使用できます。

SELECT 
    Country_id, country_title 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY country_title ORDER BY Country_id) As rn
    FROM tbl_countries) t
WHERE rn = 1

また、を使用するLEFT JOINと、これを使用できます。

SELECT t1.Country_id, t1.country_title
FROM tbl_countries t1
    LEFT OUTER JOIN
    tbl_countries t2 ON t1.country_title = t2.country_title AND t1.Country_id > t2.Country_id
WHERE
    t2.country_title IS NULL

また、 of を使用するとEXISTS、次のことを試すことができます。

SELECT t1.Country_id, t1.country_title
FROM tbl_countries t1   
WHERE
    NOT EXISTS (SELECT 1 
                FROM tbl_countries t2 
                WHERE t1.country_title = t2.country_title AND t1.Country_id > t2.Country_id)
于 2015-04-28T07:22:32.087 に答える