我非常感谢您的任何反馈。我的代码在下面,错误代码为1054。“ on”子句中的“ subq1.IATA”未知。
SELECT SUM(CASE
WHEN ABS(TZ_NUM_DEP-TZ_NUM_ARR)>=2 THEN 1 ELSE 0
END AS Total)
FROM ontime AS o1
INNER JOIN (SELECT SUBSTRING_INDEX(a1.Name,' Airport',1) AS Departure,
CASE
WHEN a1.Timezone='America/New_York (Eastern)' THEN 1
WHEN a1.TimeZone='America/Chicago (Central)' THEN 2
WHEN a1.Timezone='America/Denver and America/Phoenix (Mountain)' THEN 3
WHEN a1.Timezone='America/Los_Angeles (Pacific)' THEN 4
END AS TZ_NUM_Dep,
SUBSTRING_INDEX(a2.Name,' Airport',1) AS Arrival,
CASE
WHEN a2.Timezone='America/New_York (Eastern)' THEN 1
WHEN a2.TimeZone='America/Chicago (Central)' THEN 2
WHEN a2.Timezone='America/Denver and America/Phoenix (Mountain)' THEN 3
WHEN a2.Timezone='America/Los_Angeles (Pacific)' THEN 4
ELSE NULL
END AS TZ_NUM_Arr
FROM ontime AS o2
LEFT JOIN airports AS a1
ON o2.Origin=a1.IATA
LEFT JOIN airports AS a2
ON o2.Dest=a2.IATA
WHERE a1.Country='United States' AND a2.Country='United States' AND Cancelled=0 AND Diverted=0) subq1
ON o1.Origin=subq1.IATA;
答案 0 :(得分:1)
在子查询中,您永远不会选择IATA
,这意味着它不在“表” subq1
中。将其添加到子查询中:
SELECT SUM(CASE
WHEN ABS(TZ_NUM_DEP-TZ_NUM_ARR)>=2 THEN 1 ELSE 0
END) AS Total
FROM ontime AS o1
INNER JOIN (SELECT SUBSTRING_INDEX(a1.Name,' Airport',1) AS Departure,
a1.IATA AS IATA, -- Add this line
CASE
WHEN a1.Timezone='America/New_York (Eastern)' THEN 1
WHEN a1.TimeZone='America/Chicago (Central)' THEN 2
WHEN a1.Timezone='America/Denver and America/Phoenix (Mountain)' THEN 3
WHEN a1.Timezone='America/Los_Angeles (Pacific)' THEN 4
END AS TZ_NUM_Dep,
SUBSTRING_INDEX(a2.Name,' Airport',1) AS Arrival,
CASE
WHEN a2.Timezone='America/New_York (Eastern)' THEN 1
WHEN a2.TimeZone='America/Chicago (Central)' THEN 2
WHEN a2.Timezone='America/Denver and America/Phoenix (Mountain)' THEN 3
WHEN a2.Timezone='America/Los_Angeles (Pacific)' THEN 4
ELSE NULL
END AS TZ_NUM_Arr
FROM ontime AS o2
LEFT JOIN airports AS a1
ON o2.Origin=a1.IATA
LEFT JOIN airports AS a2
ON o2.Dest=a2.IATA
WHERE a1.Country='United States' AND a2.Country='United States' AND Cancelled=0 AND Diverted=0) subq1
ON o1.Origin=subq1.IATA;
答案 1 :(得分:0)
您在名为subq1的子查询中没有列IATA。请尝试在子查询中添加该列,例如:
和 您的TOTAL位置错误
SELECT SUM(
CASE
WHEN ABS(TZ_NUM_DEP-TZ_NUM_ARR)>=2 THEN 1 ELSE 0
END ) AS Total
FROM ontime AS o1
INNER JOIN (
SELECT a1.IATA,
SUBSTRING_INDEX(a1.Name,' Airport',1) AS Departure,
CASE
WHEN a1.Timezone='America/New_York (Eastern)' THEN 1
WHEN a1.TimeZone='America/Chicago (Central)' THEN 2
WHEN a1.Timezone='America/Denver and America/Phoenix (Mountain)' THEN 3
WHEN a1.Timezone='America/Los_Angeles (Pacific)' THEN 4
END AS TZ_NUM_Dep,
SUBSTRING_INDEX(a2.Name,' Airport',1) AS Arrival,
CASE
WHEN a2.Timezone='America/New_York (Eastern)' THEN 1
WHEN a2.TimeZone='America/Chicago (Central)' THEN 2
WHEN a2.Timezone='America/Denver and America/Phoenix (Mountain)' THEN 3
WHEN a2.Timezone='America/Los_Angeles (Pacific)' THEN 4
ELSE NULL
END AS TZ_NUM_Arr
FROM ontime AS o2
LEFT JOIN airports AS a1
ON o2.Origin=a1.IATA
LEFT JOIN airports AS a2
ON o2.Dest=a2.IATA
WHERE a1.Country='United States' AND a2.Country='United States' AND Cancelled=0 AND Diverted=0) subq1
ON o1.Origin=subq1.IATA;