[英]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_nr
和paigalduse_aeg
不同,因此DISTINCT
無法過濾掉它們。
您可以使用GROUP BY
獲得所需的內容:
GROUP BY
b.kasutaja_nimi
,b.eesnimi
,b.perenimi
,a.r_nimetus
這將為您帶來您所接受的結果-但請記住, seeria_nr
和paigalduse_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.