В MySQL, является ли плохой практикой применять «AS» [имя таблицы] к подзапросу (или производной таблице)?Если так, то почему? - PullRequest
0 голосов
/ 12 мая 2018

Как избежать "AS" для именованных таблиц в подзапросе?

Я получил несколько рабочих ответов на предыдущий вопрос MySQL год назад.

Я возьму фрагмент из двух ответов и отмечу их, а не копирую весь запрос и занимаю место. (Если я вам не нужен)

Оба ответа сработали.

Ответ 1

Первый использованный ответ AS перед псевдонимом именованной таблицы, AS highestcost и AS lowestcost ...

...
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 

Ответ 2

Во втором ответе не использовались AS, вместо этого они просто добавили дополнительный интервал между закрывающей скобкой и ее псевдонимом. Они также переименовали таблицы t1 и t2, чтобы избежать двусмысленности с любыми именами столбцов, которые я обязательно начну делать, так как это намного меньше беспорядка.

...
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 

Почему?

Оба ответа сработали, Второй ответ указан как " Избегайте использования " AS, но почему?

Я некоторое время использовал AS для производных имен таблиц и не сталкивался с какими-либо проблемами. И сами MySQL показывают использование AS в своей документации по производным таблицам, которая здесь .

Все сводится к личным предпочтениям? Лучшая производительность? Если это имеет значение, второй ответ был предоставлен пользователем с более чем 80 000 репутацией и одним вопросом. Я полагаю, он прав. Может быть, я неправильно читаю документацию по MySQL.

...