【问题标题】:MySQL: Working with @vars and subqueriesMySQL:使用@vars 和子查询
【发布时间】:2011-05-21 06:23:12
【问题描述】:

我认为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 正确传递给子查询?

什么时候应该使用子查询?

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

【问题讨论】:

标签: mysql variables subquery


【解决方案1】:

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

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 2011-05-18
    • 2015-03-04
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多