7
votes

Comment supprimer une seule rangée si plusieurs personnes trouvées?

J'ai une table qui ressemble à ceci.

CREATE TABLE tshirt
(
  id serial,
  sku character varying(255) NOT NULL
);


5 commentaires

Hein? Supprimer par ID. Si vous ne le savez pas, alors comment pouvez-vous savoir lequel doit être supprimé.


Comment savez-vous quel ciel vous voulez garder


Cela ne comporte pas quelle ligne est supprimée. Si je, il y a deux rangées correspondantes, je dois juste supprimer un, peu importe la fonction.


Et s'il y a 3, ou 6789. Il serait peut-être préférable de mettre une contrainte unique sur SKU. L'expérience suggère que cela va être important à un moment donné à l'avenir et, à ce stade, vous allez vous appeler des noms, ce qui n'inclut pas le génie, intelligent, perspicace, etc.


@Tonyhopkinson Cela ne grandira pas beaucoup, je crois que 50Rows va être le maximum de cette table.


5 Réponses :


2
votes

Indiquez à la base de données quelle ligne vous aimez supprimer en ajoutant une autre contrainte comme

Supprimer du tshirt où Sku = 'sku_you_like_to_match' et Serial = '555';


0 commentaires

10
votes

Pas le meilleur moyen, mais vous pouvez le faire:

DELETE FROM tshirt
WHERE id IN (
   SELECT id FROM
   tshirt WHERE sku='%s' LIMIT 1
)


6 commentaires

Pas le meilleur moyen? Je vous propose un prix de sous-estimation de l'année. Lequel pensez-vous que cela supprimerait, ou est-ce non pertinent?


Selon sa question, il ne soutient pas vraiment quel enregistrement est supprimé, il doit supprimer un seul


Ceci est la meilleure façon de réaliser ce qu'il veut - supprimer une rangée, peu importe qui. Une simple requête qui fait le travail. Bien sûr, sa santé mentale est toujours en question.


BTW, vous voudrez peut-être utiliser ctid ou OID s'il n'y a pas de clé unique ID .


Eh bien oui, mais la meilleure façon de vous tirer dessus dans le pied est d'appuyer sur le pistolet contre elle et de tirer la gâchette. Cela ne veut pas dire que c'est une bonne idée.


C'est faux, j'ai essayé cette requête et elle a supprimé 2 rangées. Voici ce que j'ai essayé de supprimer de Public.Test où "ID" dans (Sélectionnez "ID" de Public.Test où "ID" = 1 limite 1)



3
votes

Ceci supprime tous sauf un (qui a plus de sens pour moi que de supprimer exactement un) xxx

BTW: pour éviter cela Type de problème à l'avenir, vous devez ajouter quelques contraintes à la définition de la table: xxx


0 commentaires

3
votes

Vous pouvez tirer parti de la colonne CTID implicite trouvée dans chaque table. XXX

TIME: 0.267 MS


0 commentaires

6
votes

Cet exemple de SQL Server Supprimer le Top supprimerait le premier enregistrement de la table des employés où le last_name est "Anderson". S'il y a d'autres enregistrements dans la table des employés disposant d'un nom de "Anderson", ils ne seront pas supprimés par la déclaration supérieure Supprimer.

DELETE TOP(1)
FROM employees
WHERE last_name = 'Anderson';


0 commentaires