2010-12-06 2 views
3

Je pense que MySQL est la langue la plus difficile pour moi, j'ai commencé à apprendre MySQL il y a un an et je ne comprends toujours pas ce que je peux faire et comment je peux construire mes requêtes sans demander ici.MySQL: Travailler avec @vars et sous-requêtes

J'ai une simple requête où je voudrais voir comment je peux @vars, donc j'ai tryied ceci:

SELECT param_1, @param := param_2, @param 
FROM my_table 

le résultat est:

param_1 @param := param_2  @param 
Dave  3      [BLOB - 1B] 
Mike  4      [BLOB - 2B] 
Luke  2      [BLOB - 2B] 
Bob  65      [BLOB - 2B] 
Dean  6      [BLOB - 2B] 

doesnt il @param doit être égal à param_2?

param_1 @param := param_2  @param 
Dave  3      3 
Mike  4      4 
Luke  2      2 
Bob  65      65 
Dean  6      6 

Qu'est-ce [BLOB - 1B] et [BLOB - 2B]?

Parfois, je fais quand je dois les sous-requêtes pour obtenir qu'une seule valeur par résultat d'une table spécifique qui peut avoir plusieurs résultats, donc j'utiliser mais je ne les sous-requêtes sais pas comment cela fonctionne exactement:

SELECT table_1.param_1, table_1.param_2, @param = table_1.param_3, new_table_2.param_1,  new_table_2.param_2 
FROM table_1 
LEFT JOIN (SELECT * 
      FROM table_2 
      WHERE new_table_2.param_1 = @param 
      LIMIT 1 
      ) new_table_2 
ON new_table_2.param_1 = @param 
WHERE table_1.param_2 = 33 

Mes questions sont:

Pourquoi je reçois [BLOB - 1B] et [BLOB - 2B] dans la première requête? Est-ce que quelqu'un peut m'expliquer comment @vars peut être passé correctement aux sous-requêtes?

Lorsque des sous-séries doivent être utilisées?

Fondamentalement, quel est le processus d'une requête, existe-t-il un guide clair sur la façon dont les données sont retournées?

+0

Si vous avez vu un exemple de @ comme ça? –

+0

J'ai écrit celui-ci et j'essaie de le tester mais je sais qu'il pourrait être mal structuré, je comprendrais comment je peux le réparer en voyant de bons exemples de sous-requêtes. – vitto

+0

http://dev.mysql.com/doc/refman/5.0/fr/user-variables.html – ajreal

Répondre

0

Il ne semble nécessaire une variables définies par l'utilisateur pour cette requête

SELECT 
    table_1.param_1, 
    table_1.param_2, 
    table_1.param_3, 
    new_table_2.param_1, 
    new_table_2.param_2 
FROM table_1 
LEFT JOIN 
(
    SELECT * FROM table_2 WHERE new_table_2.param_1 = table_1.param3 LIMIT 1 
) as new_table_2 
ON new_table_2.param_1 = table_1.param3 
WHERE table_1.param_2 = 33; 
Questions connexes