J'ai une table mysql qui ressemble à ceci:
1 value1 value2 3534
2 value1 value1 8456
3 value1 value2 3566
4 value1 value3 7345
5 value2 value3 6734
J'ai besoin d'une requête pour sélectionner toutes les lignes avec les colonnes 2 et 3 distinctes, par exemple le résultat que je veux pour cet exemple ressemblera à ceci:
1 value1 value2 3534
2 value1 value1 8456
4 value1 value3 7345
5 value2 value3 6734
j'ai trouvé quelques exemples sur la façon de le faire, mais ils sélectionnent tous distinct sur chaque colonne individuellement.
En supposant que la première colonne soit unique, vous pouvez le faire:
SELECT id, col2, col3, col4
FROM yourtable
WHERE id IN
(
SELECT MIN(id)
FROM yourtable
GROUP BY col2, col3
)
Voyez le travail en ligne: sqlfiddle
Mieux vous utilisez ceci contre ci-dessus.
SELECT id, col2, col3, col4
FROM yourtable
GROUP BY col2, col3;
La raison pour laquelle je dis est parce que l'utilisation de CONCAT ne donne pas le résultat souhaité dans ce cas La première requête me renvoie 5 lignes, mais CONCAT me renvoie 4 lignes, ce qui est INCORRECT.
J'espère que vous avez mon point.
Supposons que les colonnes de la table sont (id, col2, col3, col4).
SELECT DISTINCT(CONCAT(col2, col3)) as "dummy column", id, col2, col3, col4
FROM yourtable
GROUP BY CONCAT(col2, col3);
SELECT id, col2, col3, MIN(col4)
FROM yourtable
GROUP BY col2, col3;
En supposant que les colonnes de la table soient (id, col1, col2, col3)
, vous pouvez:
SELECT *
FROM YourTable yt
JOIN (
SELECT MIN(id) as minid
FROM YourTable
GROUP BY
col1, col2
) filter
ON filter.minid = yt.id
La requête la plus simple pour cela est
SELECT col1, col2, MIN(col3)
FROM myTable
GROUP BY col1, col2
Utiliser la méthode group by me renvoie des lignes supplémentaires, où la vérification explicite de chaque champ bien que plus longtemps renvoie le même nombre d'enregistrements que count (Distinct ..)
SELECT id, col2, col3, col4
FROM yourtable yt
WHERE id =
(
SELECT MIN(id)
FROM yourtable yt1
WHERE yt.col2 = yt1.col2
AND yt.col3 = yt1.col3
)
Cette requête s'assure que la combinaison de column1 et column2 est unique, tout en sélectionnant la valeur minimale de la troisième colonne
SELECT col1, col2, MIN(col3)
FROM yourTable
GROUP BY col1, col2