MYSQL Select语句说明

时间:2011-09-01 02:06:43

标签: php mysql select

我在一个程序员前一段时间提供给我的php文件中有以下MYSQL select语句。

我正在尝试对该文件进行一些编辑(我知道足够的PHP以“让自己陷入麻烦”)。

不幸的是,我不明白这个陈述及其含义。我从未见过带有“DOTS”的select语句(即a.weight或b.oil_type_id)

我不明白怎么读它。这是声明。有人知道这是什么意思吗?

$query11 = "SELECT avg(a.weight) as weight_avg
           from oil_type a, oil_data b
           where b.oil_type_id = a.oiltype_id
           and b.viscosity_id = ". $viscosity_id_this;

4 个答案:

答案 0 :(得分:4)

这是表别名。请注意您的查询:

-- ...
FROM oil_type a

oil_type现在可以用别名a来引用。因此,当您看到a.weight时,它实际上意味着oil_type.weight

在这种情况下,这是必要的,因为在您选择的两个表中都有weight列。如果您仅使用weight,MySQL将无法知道要使用哪个weight列,因此会返回错误。

编辑:正如菲尔在评论中指出的那样,在这种情况下不一定有两个weight列,因为一些奇怪的原因我以为你自己加入了你的桌子(因此很明显复制列。)

答案 1 :(得分:2)

甚至更多 - 您可以将其称为database_name.table_name.column_name并在一个名称中包含2个点

答案 2 :(得分:1)

使用他们的表名(或者更确切地说,他们的别名)限定列:

SELECT avg( a.weight ) as weight_avg 
  FROM oil_type a, oil_data b  -- b is an alias for oil_data, a is an alias for oil_type
                               -- also, there's an implicit join here
 WHERE b.oil_type_id = a.oiltype_id 
   AND b.viscosity_id =". $viscosity_id_this;

这是消除歧义所必需的(即:当两个表中都存在具有相同名称的列时)。如果列名不相同,您可以使用它来清楚。

整个查询可以改写为:

    SELECT AVG(a.weight) as weight_avg 
      FROM oil_type AS a
INNER JOIN oil_data AS b 
        ON b.oil_type_id = a.oiltype_id 
     WHERE b.viscosity_id = $viscosity_id_this;

哪个可能更清楚(或不是)。

答案 3 :(得分:0)

从多个表中进行选择时,可以使用表名或其别名,后跟.和列名称,以减少/消除类似命名列之间的歧义。

在这种情况下,表格oil_type的别名为aoil_data的别名为b