由于某种原因,无法删除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 |
+---------------+---------+----------+----------------+-----------+----------------+
答案 0 :(得分:1)
首先,此查询效果很好,因为seeria_nr
和paigalduse_aeg
不同,因为您可以看到DISTINCT
无法过滤掉它们。
您可以使用GROUP BY
来获得所需内容:
GROUP BY
b.kasutaja_nimi
,b.eesnimi
,b.perenimi
,a.r_nimetus
这将为您带来您所禁用的结果 - 但请记住seeria_nr
和paigalduse_aeg
将随机显示值。
答案 1 :(得分: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
的需要。此外,您应该使用表别名并限定所有列名。