在不使用子查询的情况下加入派生列
Joining on derived column without using subquery
在 MySQL 中,我试图在派生列上连接两个 table,如下所示:
SELECT C.country,
IFNULL(C.preferred_city, C.default_city) AS best_city,
PC.postal_code
FROM Countries as C
INNER JOIN PostalCodes AS PC
ON best_city=PC.city
这当然行不通,因为 best_city
超出了 ON
子句的范围。
我能找到的唯一解决方案是使用子查询(或者这被认为是派生的 table?我对命名法很模糊):
SELECT BC.*, PC.postal_code
FROM (
SELECT country, IFNULL(preferred_city, default_city) AS best_city
FROM COUNTRIES
) AS BC
INNER JOIN PostalCodes AS PC
ON BC.best_city=PC.city
从 shell 起效果很好。但是,我试图将其实现为一个视图,它给了我错误:错误 1349:视图的 SELECT 包含 FROM 子句中的子查询
如何在不使用子查询的情况下修改此连接?
谢谢!
试试这样的东西:
SELECT BC.*, PC.postal_code
FROM COUNTRIES BC
INNER JOIN PostalCodes AS PC
ON PC.city = IFNULL(preferred_city, default_city)
在 MySQL 中,我试图在派生列上连接两个 table,如下所示:
SELECT C.country,
IFNULL(C.preferred_city, C.default_city) AS best_city,
PC.postal_code
FROM Countries as C
INNER JOIN PostalCodes AS PC
ON best_city=PC.city
这当然行不通,因为 best_city
超出了 ON
子句的范围。
我能找到的唯一解决方案是使用子查询(或者这被认为是派生的 table?我对命名法很模糊):
SELECT BC.*, PC.postal_code
FROM (
SELECT country, IFNULL(preferred_city, default_city) AS best_city
FROM COUNTRIES
) AS BC
INNER JOIN PostalCodes AS PC
ON BC.best_city=PC.city
从 shell 起效果很好。但是,我试图将其实现为一个视图,它给了我错误:错误 1349:视图的 SELECT 包含 FROM 子句中的子查询
如何在不使用子查询的情况下修改此连接?
谢谢!
试试这样的东西:
SELECT BC.*, PC.postal_code
FROM COUNTRIES BC
INNER JOIN PostalCodes AS PC
ON PC.city = IFNULL(preferred_city, default_city)