簡體   English   中英

DISTINCT不會刪除重復項

[英]DISTINCT does not remove duplicates

由於某些原因,無法使用SELECT 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     |
+-------------+--------------+----------------+

我正在使用的查詢:

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|
+---------------+---------+----------+----------------+-----------+--------------+
| jann12        | Jaan    | Jaanik   | Latitude L2100 |  33333333 |2010-10-10    |
| juku23        | Juku    | Juust    | Latitude L2110 |  44444444 |2010-10-01    |
+---------------+---------+----------+----------------+-----------+--------------+

看起來如何:

+---------------+---------+----------+----------------+-----------+----------------+
| 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     |
+---------------+---------+----------+----------------+-----------+----------------+

首先,此查詢工作良好,因為您可以看到seeria_nrpaigalduse_aeg不同,因此DISTINCT無法過濾掉它們。

您可以使用GROUP BY獲得所需的內容:

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

這將為您帶來您所接受的結果-但請記住, seeria_nrpaigalduse_aeg將隨機顯示值。

正確使用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 此外,您應該使用表別名並限定所有列名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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