Comment écrire un SQL DELETE avec une instruction SELECT dans la clause where?
Base De Données: Sybase Avantage 11
Sur ma quête pour normaliser les données, je suis en train de supprimer les résultats que j'obtiens à partir de ce SELECT
déclaration:
SELECT tableA.entitynum
FROM tableA q
INNER JOIN tableB u on (u.qlabel = q.entityrole AND u.fieldnum = q.fieldnum)
WHERE (LENGTH(q.memotext) NOT IN (8,9,10)
OR q.memotext NOT LIKE '%/%/%')
AND (u.FldFormat = 'Date')
;
C'est le DELETE
déclaration que je viens avec:
DELETE FROM tableA
WHERE (SELECT q.entitynum
FROM tableA q
INNER JOIN tableB u on (u.qlabel = q.entityrole AND u.fieldnum = q.fieldnum)
WHERE (LENGTH(q.memotext) NOT IN (8,9,10)
OR q.memotext NOT LIKE '%/%/%')
AND (u.FldFormat = 'Date'))
;
Je continue cette erreur s'affiche lorsque j'essaie d'exécuter cette instruction:
ERROR IN SCRIPT: poQuery: Error 7200: AQE Error: State = S0000; NativeError = 2124;
[iAnywhere Solutions][Advantage SQL Engine]Invalid operand for operator: = Boolean value
cannot be operated with non-Boolean value.
J'ai aussi essayé cette déclaration:
DELETE FROM tableA
INNER JOIN tableB u on (u.qlabel = tableA.entityrole AND u.fieldnum = tableA.fieldnum)
WHERE (LENGTH(q.memotext) NOT IN (8,9,10)
OR tableA.memotext NOT LIKE '%/%/%')
AND (u.FldFormat = 'Date')
;
Qui se traduit par:
ERROR IN SCRIPT: poQuery: Error 7200: AQE Error: State = 42000; NativeError = 2117;
[iAnywhere Solutions][Advantage SQL Engine] Unexpected token: INNER -- Expecting semicolon.
-- Location of error in the SQL statement is: 23 (line: 2 column: 1)
Quelqu'un pourrait-il m'aider à bien la construction d'une requête de SUPPRESSION qui va aboutir à la bonne données supprimées?
- Le pire des scénarios, vous pouvez créer une table temporaire, SÉLECTIONNEZ dans la table temporaire, faites votre supprimer de rejoindre la table temporaire, puis Dropant la table temporaire?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour identifier la clé primaire dans le TableA afin de supprimer l'enregistrement correct. La clé primaire peut être une seule colonne ou une combinaison de plusieurs colonnes qui identifie de manière unique une ligne dans la table. Si il n'y a pas de clé primaire, puis le ROWID pseudo de la colonne peut être utilisée en tant que clé primaire.
Votre deuxième
DELETE
requête était presque correct. Juste être sûr de mettre le nom de la table (ou un alias) entreDELETE
etFROM
pour spécifier la table dans laquelle vous souhaitez supprimer de. C'est plus simple que d'utiliser un imbriquéeSELECT
déclaration, comme dans les autres réponses.Corrigé Requête (option 1: utilisation de nom de table complet):
Corrigé Requête (option 2: à l'aide d'un alias):
Plus d'exemples ici:
Comment faire pour Supprimer à l'aide d'une JOINTURE INTERNE avec SQL Server?
Ne devriez-vous pas avoir:
Maintenant, vous avez juste un OÙ sans comparaison:
Donc votre dernière requête devrait ressembler à ceci;
dans ce scénario:
n'êtes-vous pas manque la colonne que vous souhaitez comparer? exemple:
Je suppose que c'est cette colonne depuis dans le select, vous êtes en sélectionnant à partir de la même table que vous souhaitez supprimer à partir de cette colonne.
Fait quelque chose comme ça une fois: