在MySQL中,应用“应用”是否是一种不好的做法;作为「;子查询(或派生表)的[tablename]?若然,原因为何? 在子查询中避免命名表的“AS”?
大约一年前,我收到了以前MySQL的多个工作答案 我将从两个答案中提取一个片段并标记它们,而不是复制整个查询并占用空间。(除非你需要我) 两个答案都有效 答复1 第一个答案将在MySQL中,应用“应用”是否是一种不好的做法;作为「;子查询(或派生表)的[tablename]?若然,原因为何? 在子查询中避免命名表的“AS”?,mysql,select,syntax,subquery,alias,Mysql,Select,Syntax,Subquery,Alias,大约一年前,我收到了以前MySQL的多个工作答案 我将从两个答案中提取一个片段并标记它们,而不是复制整个查询并占用空间。(除非你需要我) 两个答案都有效 答复1 第一个答案将用作命名表别名前面的,用作最高成本,将用作最低成本 为什么? 两个答案都有效,第二个答案指定为“避免使用”作为,但为什么 我使用作为作为派生表名已经有一段时间了,没有遇到任何问题。MySQL本身在其派生表的文档中显示了作为的使用,而派生表是 这归结于个人喜好吗?更好的表现?如果重要的话,第二个答案是由一个声誉超过80000的
用作命名表别名前面的,用作最高成本,将用作最低成本
为什么?
两个答案都有效,第二个答案指定为“避免使用”作为
,但为什么
我使用作为
作为派生表名已经有一段时间了,没有遇到任何问题。MySQL本身在其派生表的文档中显示了作为
的使用,而派生表是
这归结于个人喜好吗?更好的表现?如果重要的话,第二个答案是由一个声誉超过80000的用户提供的,他只回答了一个问题。所以我认为他是对的。可能我没有正确阅读MySQL文档。我使用过的大多数数据库都允许别名带有或不带有AS
,我认为这是ANSI标准的一部分。使用你喜欢的任何一个。@TimBiegeleisen你喜欢哪一个?我(大多数时候)不使用它,因为我发现它用一些不需要的东西来填充查询。我很好奇@GordonLinoff在这里会说些什么,所以我对你的问题投了赞成票。我从来没有用过。这是多余的,会中断我对查询的扫描。但这肯定是个人偏好。它不会对优化器产生重大影响,尽管如果运行EXPLAIN EXTENDED my query,然后运行SHOW警告,它总是会将这些警告以及那些讨厌的反标记添加回优化器
...
FROM vendor
inner join vendorparts on vendor.id = vendorparts.vendorid
inner join part on vendorparts.partid = part.id
inner join product on product.partid = part.id
INNER JOIN (SELECT vendorparts.partid,
Max(vendorparts.lastcost) AS Highestcost
FROM vendorparts
GROUP BY vendorparts.partid) AS highestcost
ON part.id = highestcost.partid
INNER JOIN (SELECT vendorparts.partid,
Min(vendorparts.lastcost) AS Lowestcost
FROM vendorparts
GROUP BY vendorparts.partid) AS lowestcost
ON part.id = lowestcost.partid
WHERE vendorparts.lastcost <> 0
...
FROM vendor
INNER JOIN vendorparts on vendor.id = vendorparts.vendorid
INNER JOIN part on vendorparts.partid = part.id and
INNER JOIN product on product.partid = part.id
INNER JOIN (SELECT vendorparts.partid,
Max(vendorparts.lastcost) AS Highestcost
FROM vendorparts
GROUP BY vendorparts.partid) t1
ON part.id = t1.partid
INNER JOIN (SELECT vendorparts.partid,
Min(vendorparts.lastcost) AS Lowestcost
FROM vendorparts
GROUP BY vendorparts.partid) t2
ON part.id = t2.partid
WHERE vendorparts.lastcost <> 0