2010-02-11 5 views
2

J'ai un problème avec une requête.Mise à jour avec sous-requête

J'ai une énorme table avec des codes postaux d'Allemagne appelée «Postleitzahlen». Il y a une autre table avec des entreprises appelé

Structure 'Firmen' est comme ça:

Firmen 
------ 
ID 
City 
State 
ZipCode 


Postleitzahlen 
-------------- 
ZipCode 
State 

Maintenant, je veux, tous les vides ('' ou NULL) État des champs de Firmen mis à jour avec leurs correspendants de Postleitzahlen

C'est ma requête réelle:

UPDATE 
    Firmen 
SET 
    Firmen.State = Postleitzahlen.State 
FROM 
    Postleitzahlen 
INNER JOIN 
    Firmen ON Postleitzahlen.ZipCode = Firmen.ZipCode 
WHERE 
    (
     Firmen.State = '' 
    OR Firmen.State IS NULL) 

Je reçois une réponse avec xx lignes affectées, mais en fait, rien n'est mis à jour.

Quelqu'un peut-il m'aider?

Merci d'avance.

  • dennis
+0

Vous pouvez modifier votre balise de MSSQL à Tsql. Cela est utilisé un peu plus –

Répondre

4

Cela ressemble à ça devrait fonctionner correctement. Ce que je voudrais faire est d'exécuter la requête ci-dessous:

SELECT Firmen.State,Postleitzahlen.State 
FROM 
    Postleitzahlen 
INNER JOIN 
    Firmen ON Postleitzahlen.ZipCode = Firmen.ZipCode 
WHERE 
    (
     Firmen.State = '' 
    OR Firmen.State IS NULL) 

Voir ce que vous obtenez. Si vous obtenez des résultats avec des valeurs dans les deux colonnes, vous avez probablement un problème différent. Cependant, je devine que l'une des colonnes est nulle ou vide puisque vous mettez à jour les lignes mais rien n'est changé.

Ensuite, il ne doit y avoir rien de mal à votre requête. Je pense que cela pourrait être avec votre mise à jour alors. Essayez de faire la table un alias, comme ceci:

UPDATE 
    F 
SET 
    F.State = Postleitzahlen.State 
FROM 
    Postleitzahlen 
INNER JOIN 
    Firmen F ON Postleitzahlen.ZipCode = F.ZipCode 
WHERE 
    (
     F.State = '' 
    OR F.State IS NULL) 
+0

Je reçois deux colonnes, la première colonne toujours vide, la deuxième colonne (toujours) remplie de valeurs. Quoi qu'il en soit, la requête s'exécute, j'obtiens xx résultats affectés, mais il n'y a aucun changement:/ des idées? – hubbl

+0

Consultez ma mise à jour. Je pense que cela pourrait être à cause de la mise à jour n'utilisant pas une valeur d'alias. J'ai l'impression d'avoir fait face à cela il y a quelques années parce que maintenant, quand je cours des mises à jour, j'alias toujours la table que je mets à jour. Si cela ne fonctionne pas, vous pouvez essayer une sous-requête. Ce n'est pas optimal mais ça devrait marcher. Je peux vous donner le code pour ça si ça ne marche pas. –

+0

Ce serait bien si vous postez cette requête avec la sous-requête, votre requête de style alias mise à jour ne fonctionne pas non plus fyi: un champ est varchar, l'autre est nvarchar mais je trouve que cela ne peut pas être la raison .. – hubbl

1
UPDATE 
    Firmen f 
SET 
    f.State = (SELECT p.State FROM Postleitzahlen p WHERE p.ZipCode = f.ZipCode) 
WHERE 
    (
     f.State = '' 
    OR f.State IS NULL)