-3
votes

Besoin d'aide pour comprendre Supprimer l'énoncé sur SQL Server

J'ai vu une déclaration de suppression écrite dans le format ci-dessous et j'ai besoin d'aide pour la comprendre.

create table t1 (id int);
create table t2 (id int);

insert into t1 values(1);
insert into t1 values(2);
insert into t2 values(1);

delete t1
from t2
where t1.id = t2.id;


4 commentaires

Le script de votre question fonctionnera si vous spécifiez un type de données valide dans le tableau Créer une table


Le nombre dans les deux tableaux doit être INT au lieu du nombre.


Raj Veuillez vérifier cela, il fonctionne dbfiddle.uk/...


"J'ai essayé ci-dessus dans la base de données SQL Server en ligne, mais le script échoue." - Veuillez soumettre des bugs avec un rapport d'erreur. Voter à fermer jusque-là en raison de la qualité extrêmement basse.


3 Réponses :


1
votes

Vous devez écrire une jointure comme indiqué ci-dessous pour supprimer l'enregistrement qui se trouve dans les deux tables.

Vous pouvez apprendre plus en détail ici à Supprimer et mettre à jour des lignes à l'aide d'une jointure intérieure dans SQL Server . P>

delete t1
from Firsttable t1
inner join Secondtable t2 on t1.id = t2.id
where <put your condition here>


4 commentaires

Merci, même je pensais à la même ligne, mais ce que j'ai écrit en question est un code de production. Je ne sais pas comment il fonctionne dans SQL Server.


@Raj J'ai pris T1 et T2 comme alias de table que vous pouvez également donner le nom réel. Vérifiez la démo.


Ce n'est pas sur la façon d'écrire, je suis Développeur ORACLE SQL. Pour un bug lié au code SQL Server, j'antiliserais la procédure stockée et j'ai vu une instruction DELETE dans ce format. Cela fonctionne bien mais je suis curieux de savoir comment cela fonctionne dans SQL Server.


@Raj Il peut y avoir des façons différentes telles que la jointure interne Supprimer, en utilisant Exist ou en utilisant où comme vous l'avez écrit. Je pense que vous devriez aller à la documentation.



2
votes

the Supprimer la déclaration a la syntaxe suivante:

DELETE t1
FROM t2
WHERE t1.id = t2.id


3 commentaires

Ce n'est pas sur la façon d'écrire, je suis Développeur ORACLE SQL. Pour un bug lié au code SQL Server, j'antiliserais la procédure stockée et j'ai vu une instruction DELETE dans ce format. Cela fonctionne bien mais je suis curieux de savoir comment cela fonctionne dans SQL Server.


Il peut être déroutant car vous pouvez faire référence à une table ou à un alias d'une table à supprimer avant le de . Si c'est une table, vous pouvez utiliser ses colonnes pour rejoindre ou filtrer dans le (sans le répéter après le à partir de ), si c'est un alias, s'il s'agit d'un alias, alors vous devez mentionner le Table appropriée avec l'alias dans le de .


Et depuis l'addition de CTES, il est généralement préférable d'écrire une sous-requête CTE et de cibler cela dans votre Supprimer ou mettre à jour.



1
votes

Vous pouvez utiliser TYPE INT STRY> au lieu de NUMÉRO STRAND> Comme numéro est invalide dans SQL Server:

    create table t1(id int);
    create table t2(id int);


0 commentaires