0
votes

SQL Sélection des lignes, où la valeur de la colonne est unique (apparaît uniquement une fois)

Compte tenu de la table xxx pré>

Je souhaite sélectionner le nom et l'identifiant, des lignes où le nom est unique (on n'apparaît qu'une seule fois) p>

Ceci est essentiellement identique comme Comment sélectionner des valeurs uniques d'une colonne de la table? , mais remarquez que l'auteur n'a pas besoin de l'identifiant, de sorte que ce problème peut être résolu par un groupe par nom comptant (nom) = 1 code> p>

Cependant, j'ai besoin d'extraire toute la ligne (pourrait être des dizaines ou des centaines de colonnes), y compris l'ID. , où compte (nom) = 1 code>, mais je ne peux pas groupe par ID, nom code> comme chaque combinaison de ceux-ci sont uniques. p>

EDIT: p>

suis à l'aide de Google BigQuery. P>

Résultats attendus: P>

| id | Name |
| 02 | Chad |
| 04 | Tim  |


3 commentaires

"SQL" est juste une langue, pas un produit réel. S'il vous plaît dites-nous quelle version de SQL que vous utilisez (E.G. MySQL, SQL Server, Oracle, Postgres, etc.).


C'est toujours une bonne idée de spécifier également le résultat attendu, même lorsque vous le trouvez évident.


Merci pour vos commentaires, j'ai mis à jour la question avec SQL-Version et les résultats attendus.


8 Réponses :


0
votes

Utilisation existe et vérifiez le nom UQIQUE

   select id,name 
    from table t1 
   where exists ( select 1 from table t2 where t1.name=t2.name

    having count(*)=1
)


0 commentaires

2
votes

Utilisez sous-requête corrélée

Démo xxx

sortie: xxx


4 commentaires

C'est juste au-delà de ma compréhension qui me baisse sans même comprendre la réponse - si vous pensez avoir assez de connaissances - expliquez-moi


Je n'ai pas voté votre réponse, mais j'ai remarqué que dans votre sortie Tim n'est pas mentionné. Peut-être que vous avez oublié (éditer: écrire) lui?


@Czarek, avez-vous vérifié la démo - allez-y ajouter une autre rangée pour TIM - ça viendra


Si vous mettez à jour votre message pour inclure toutes les lignes du violon et du même code dans votre exemple en tant que violon, je vais marquer ceci comme accepté.



0
votes

S'il vous plaît essayez ceci.

SELECT 
   DISTINCT id,NAME
FROM
   tableName


1 commentaires

Cela me donnera chaque combinaison distincte de ID et nom .



0
votes

Vous pouvez utiliser plusieurs sous-candidats pour extraire ce dont vous avez besoin. xxx


0 commentaires

1
votes

Vous pouvez utiliser n'existe pas : xxx

ceci nécessiterait index sur la table (ID, nom) pour produire un ensemble de résultats plus rapide .


0 commentaires

4
votes

Faites simplement un groupe par code>. Utilisez avoir code> pour vous assurer qu'un nom n'est là qu'une seule fois. Utilisez min () code> pour choisir le seul identifiant pour le nom.

select min(id), name
from tablename
group by name
having count(*) = 1


0 commentaires

0
votes

Que diriez-vous d'une simple agrégation?

select any_value(id), name
from t
group by name
having count(*) = 1;


0 commentaires

0
votes

ci-dessous est pour BigQuery Standard SQL et fonctionne pour un nombre quelconque de colonnes sans les appeler explicitement et ne nécessite aucune solution ou sous-sélectionnant

#standardSQL
SELECT t.*
FROM (
  SELECT ANY_VALUE(t) t
  FROM `project.dataset.table` t
  GROUP BY name
  HAVING COUNT(1) = 1
)


0 commentaires