У меня есть запрос, который имеет подзапрос в качестве столбца поля, но я хочу использовать этот столбец поля в другом месте.Использование SubQuery в качестве столбца поля
SELECT c.country_code AS
country_code,
c.dial_code AS
dial_code,
(SELECT r.destination
FROM region r
WHERE r.country_code = c.country_code
AND r.dial_code = c.dial_code) AS
destination,
c.start_time,
c.duration,
c.call_type,
c.customer_prefix AS
customer_prefix,
c.vendor_prefix AS
vendor_prefix,
(SELECT Round(r.rate, 3)
FROM rate r
INNER JOIN region re
ON r.region_id = re.id
INNER JOIN account_prefix ap
ON r.account_prefix_id = ap.id
WHERE re.country_code = c.country_code
AND re.dial_code = c.dial_code
AND ap.prefix = c.customer_prefix
AND ap.prefix_type = 0) AS
**customer_rate**,
(SELECT Round(r.rate, 3)
FROM rate r
INNER JOIN region re
ON r.region_id = re.id
INNER JOIN account_prefix ap
ON r.account_prefix_id = ap.id
WHERE re.country_code = c.country_code
AND re.dial_code = c.dial_code
AND ap.prefix = c.vendor_prefix
AND ap.prefix_type = 1) AS
**vendor_rate**,
(SELECT Round(r.rate, 3)
FROM rate r
INNER JOIN region re
ON r.region_id = re.id
INNER JOIN account_prefix ap
ON r.account_prefix_id = ap.id
WHERE re.country_code = c.country_code
AND re.dial_code = c.dial_code
AND ap.prefix = c.customer_prefix
AND ap.prefix_type = 0) - (SELECT Round(r.rate, 3)
FROM rate r
INNER JOIN region re
ON r.region_id = re.id
INNER JOIN account_prefix ap
ON r.account_prefix_id
= ap.id
WHERE
re.country_code = c.country_code
AND re.dial_code = c.dial_code
AND ap.prefix = c.vendor_prefix
AND ap.prefix_type = 1) AS **unit_profit**,
unit_profit * duration
FROM cdr c
LIMIT 100;
Как вы можете видеть, я хочу использовать unit_profit, customer_rate и vendor_rate. Как его достичь?
EDIT:
Любой учебник, который показывая присоединиться на просмотр?
Вы не можете напрямую использовать псевдонимы, определенные в том же списке SELECT. Вам нужно будет использовать внешний запрос или (если ваша RDBMS поддерживает его) CTE. –
Просьба подробно рассказать о внешнем запросе. Что такое CTE? Я использую базу данных mysql. – peterwkc
Ответ Erwin Brandstetter дает пример внешнего запроса (дополнительный SELECT FROM из всех внутренних запросов. CTE означает * Общие выражения таблиц * (я думал о 'WITH'), но, судя по всему, MySQL не поддерживает его. –