我在一个程序员前一段时间提供给我的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;
答案 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
的别名为a
,oil_data
的别名为b
。