MySQL:使用@vars和子查询

时间:2010-12-06 22:16:52

标签: mysql variables subquery

我认为MySQL对我来说是最难的语言,一年前我开始学习MySQL而且我仍然不明白我能做什么以及如何在不问这里的情况下构建我的查询。

我有一个简单的查询,我希望看到我能@vars,所以我试过这个:

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

结果是:

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]

不要期望@param等于param_2?

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

什么是[BLOB - 1B][BLOB - 2B]

有时候我需要在每个特定表的结果中只获得一个可以有多个结果的值时创建子查询,所以我使用子查询但我不知道它是如何工作的:

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

我的问题是:

为什么我在第一个查询中获得[BLOB - 1B][BLOB - 2B]

有人可以解释一下@vars如何正确传递给子查询吗?

何时应使用子查询?

基本上,查询的过程是什么,确实存在一些关于如何返回数据的明确指南?

1 个答案:

答案 0 :(得分:0)

此查询似乎不需要用户定义的变量

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;