MySQL:无法加入子查询

时间:2018-08-04 14:44:28

标签: mysql

我非常感谢您的任何反馈。我的代码在下面,错误代码为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;

2 个答案:

答案 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;