2016-05-29 10 views
0

何らかの理由でSELECT DISTINCTで重複を削除できません。DISTINCTは重複を削除しません

マイテーブル:

mysql> select * from kasutaja; 
+----+---------+----------+---------------+ 
| id | eesnimi | perenimi | kasutaja_nimi | 
+----+---------+----------+---------------+ 
| 1 | Juku | Juust | juku23  | 
| 2 | Jaan | Jaanik | jann12  | 
+----+---------+----------+---------------+ 

mysql> select * from riistvara; 
+----+----------------+-----------+ 
| id | r_nimetus  | seeria_nr | 
+----+----------------+-----------+ 
| 1 | Latitude L2100 | 33333333 | 
| 2 | Latitude L2110 | 44444444 | 
+----+----------------+-----------+ 

mysql> select * from r_paigaldus; 
+-------------+--------------+----------------+ 
| kasutaja_id | riistvara_id | paigalduse_aeg | 
+-------------+--------------+----------------+ 
|   1 |   1 | 2010-01-01  | 
|   1 |   2 | 2010-10-01  | 
|   2 |   2 | 2010-01-01  | 
|   2 |   1 | 2010-10-10  | 
+-------------+--------------+----------------+ 

クエリ私が使用している:それはどのように見えるか

+---------------+---------+----------+----------------+-----------+--------------+ 
| kasutaja_nimi | eesnimi | perenimi | r_nimetus  | seeria_nr |paigalduse_aeg| 
+---------------+---------+----------+----------------+-----------+--------------+ 
| jann12  | Jaan | Jaanik | Latitude L2100 | 33333333 |2010-10-10 | 
| juku23  | Juku | Juust | Latitude L2110 | 44444444 |2010-10-01 | 
+---------------+---------+----------+----------------+-----------+--------------+ 

SELECT DISTINCT kasutaja_nimi, eesnimi, perenimi, r_nimetus, seeria_nr, paigalduse_aeg 
FROM riistvara, kasutaja 
JOIN r_paigaldus ON id = r_paigaldus.kasutaja_id; 

は、クエリの結果は次のように見て終わる必要があります方法:

+---------------+---------+----------+----------------+-----------+----------------+ 
| kasutaja_nimi | eesnimi | perenimi | r_nimetus  | seeria_nr | paigalduse_aeg | 
+---------------+---------+----------+----------------+-----------+----------------+ 
| juku23  | Juku | Juust | Latitude L2100 | 33333333 | 2010-01-01  | 
| juku23  | Juku | Juust | Latitude L2110 | 44444444 | 2010-01-01  | 
| juku23  | Juku | Juust | Latitude L2100 | 33333333 | 2010-10-01  | 
| juku23  | Juku | Juust | Latitude L2110 | 44444444 | 2010-10-01  | 
| jann12  | Jaan | Jaanik | Latitude L2100 | 33333333 | 2010-01-01  | 
| jann12  | Jaan | Jaanik | Latitude L2110 | 44444444 | 2010-01-01  | 
| jann12  | Jaan | Jaanik | Latitude L2100 | 33333333 | 2010-10-10  | 
| jann12  | Jaan | Jaanik | Latitude L2110 | 44444444 | 2010-10-10  | 
+---------------+---------+----------+----------------+-----------+----------------+ 
+2

あなたはmysql _or_ sql-serverについてお答えしますか?どちらの場合でも、「別個」はおそらく設計どおりに動作し、あなたの前提は正しくありません。 – Marvin

+3

これらの結果は正しいです、あなたは 'r_nimetus'、' seeria_nr'と 'paigalduse_aeg'を見るときに別個の値の組み合わせを持っています。 'Latitude L2100'と' Latitude L2110'に '33333333'と' 44444444'と '2010-01-01'と' 2010-10-01'を組み合わせたものです。 – gmiley

+1

これはお探しですか? http://stackoverflow.com/questions/6127338/sql-mysql-select-distinct-unique-but-return-all-columns – Marvin

答えて

1

まず、seeria_nrpaigalduse_aegが異なるので、DISTINCTはそれらを除外できないため、このクエリはうまくいきます。

あなたが望む結果を得るためにGROUP BYを使用することができます。

GROUP BY 
    b.kasutaja_nimi 
    ,b.eesnimi 
    ,b.perenimi 
    ,a.r_nimetus 

この意志はあなたにあなたがexecept結果をもたらします - しかし、それseeria_nrpaigalduse_aeg覚え値ランダムに表示されます。

1

joinを正しく使用してください。単純なルール:は、FROM句にカンマを使用します。 常には、明示的なJOIN構文を使用します。

SELECT kasutaja_nimi, eesnimi, perenimi, r_nimetus, seeria_nr, paigalduse_aeg 
FROM kasutaja k JOIN 
    r_paigaldu rp 
    ON k.id = rp.kasutaja_id JOIN 
    riistvarar r 
    ON r.id = rp.riistvara_id; 

これはおそらくselect distinctの必要性を排除します。さらに、表の別名を使用して、すべての列名を修飾する必要があります。

関連する問題