2010-06-21 3 views
0

Regardez here et here.Comment déterminer si une requête MySQL est valide?

Avec les réponses ci-dessus, j'ai fait cette requête, est-ce valide? Si non, comment puis-je le corriger?

SELECT *, 
FROM TABLE_2 t 
WHERE EXISTS(SELECT IF(column1 = 'smith', column2, column1)  
FROM TABLE_1 a 
WHERE 'smith' IN (a.column1, a.column2) 
     AND a.status = 1    
       AND ('smith' IN (t.column1, t.column2) 
       ) 
+0

La réponse ci-dessous fait paraître cette question était un peu trop large, même quand il a été demandé, il est donc logique pour maintenant être mis en attente. – halfer

Répondre

1

Pour commencer, la virgule après select * n'appartient pas. Deuxièmement, vous alias vos tables (table_2 t et table_1 a), mais vous n'utilisez pas systématiquement les alias, donc vous pouvez avoir des problèmes au moment de l'exécution. Aussi, du point de vue de la maintenance, je pense que la plupart des gens préfèrent utiliser des alias lorsqu'ils sont déclarés, et aucun alias autrement. Troisièmement, vous faites une comparaison avec les colonnes de la table t dans la sélection externe ('smith' in (t.column1, t.column2)), lorsque cela semble inutile. Vous pouvez simplement le faire dans le select externe. En d'autres termes, vous pouvez déplacer ce parent paren avant le AND ('smith' ...

Quant à savoir si cela fonctionne - je ne sais pas, car je ne sais pas ce que vous essayez d'accomplir.

combiné, qui vous laisse avec:

SELECT t.* 
FROM TABLE_2 t 
WHERE EXISTS (SELECT IF(a.column1 = 'smith', a.column2, a.column1)  
       FROM TABLE_1 a 
       WHERE 'smith' IN (a.column1, a.column2) 
       AND a.status = 1) 
AND ('smith' IN (t.column1, t.column2) 
+0

Je suis confus à propos de SELECT IF (a.column1 = 'smith', a.column2, a.column1). Ce que j'essaie réellement de faire, c'est que, s'il y a une ligne, dans column1 ou column2 ayant 'smith', alors ne sélectionnez pas cette colonne, sélectionnez plutôt la colonne opposée à celle de table1. Si vous voyez le premier message, vous pouvez voir à nouveau la structure de la table et ma question. J'espère que vous pourrez m'aider à régler ce problème. Merci - kaash1 il ya 1 minutes –

+0

@moustafa: que voulez-vous dire par "sélectionnez la colonne opposée à celle de la table1"? – MJB

+0

s'il vous plaît jeter un oeil à Table 1 et Table 2 dans mon message original. Je veux construire une requête comme: "Je veux sélectionner toutes les lignes du tableau 1 où il y a smith dans la colonne1 ou la colonne 2. S'il y a smith dans la colonne 1, alors sélectionnez la valeur de la colonne 2, et s'il y a smith dans la colonne2 , puis sélectionnez la valeur dans la colonne 1 de la ligne, puis sélectionnez toutes les lignes du tableau 2 qui contient cette valeur dans la colonne1 ou la colonne2 du tableau 2, ce que nous avons obtenu en sélectionnant dans le tableau 1 " –

Questions connexes