【问题标题】:Unknown column issue未知列问题
【发布时间】:2015-09-23 17:18:18
【问题描述】:
SELECT 
   daf.id as affiliate_id,
   daf.name as affiliate_name,
   dal.name as allocation_name,
   dal.id as allocation_id,
   dal.allocation,dal.price
FROM 
     degreeamerica.affiliates daf,degreeamerica.allocations dal 
JOIN 
     (select pap.lead_price,pap.live, pap.allocation_id,pap.affiliate_id from paul.affiliates_price pap) pafp  
ON (dal.id=pafp.allocation_id and daf.id=pafp.affiliate_id) 
ORDER BY daf.id;

问题:它在 on 子句中显示未知列 daf.id,虽然我在字段列表中有此列,请帮助!!!。

【问题讨论】:

  • 为什么要混合新旧风格的JOIN 表达式?

标签: mysql sql database subquery mysql-workbench


【解决方案1】:

JOIN 链在逗号分隔表之前进行评估。一直切换到显式JOINs 就可以了。

SELECT 
   daf.id as affiliate_id,
   daf.name as affiliate_name,
   dal.name as allocation_name,
   dal.id as allocation_id,
   dal.allocation,dal.price
FROM 
     (select pap.lead_price,pap.live, pap.allocation_id,pap.affiliate_id
      from paul.affiliates_price pap) pafp  
JOIN
     degreeamerica.affiliates daf
     ON (daf.id = pafp.affiliate_id) 
JOIN
     degreeamerica.allocations dal ON 
     ON (dal.id = pafp.allocation_id) 
ORDER BY daf.id;

【讨论】:

    【解决方案2】:

    尝试像这样编写FROM 子句:

    FROM paul.affiliates_price pafp JOIN
         degreeamerica.affiliates daf
         ON daf.id = pafp.affiliate_id JOIN
         degreeamerica.allocations dal 
         ON dal.id = pafp.allocation_id 
    

    子查询也是不必要的,它阻碍了索引的使用(在 MySQL 中)。

    【讨论】:

      【解决方案3】:

      您可以将affiliates_price 表的子查询用作 FROM 和 WHERE 子句之间的表。它将以这种方式工作。

      SELECT 
        daf.id as affiliate_id,
        daf.name as affiliate_name,
        dal.name as allocation_name,
        dal.id as allocation_id,
        dal.allocation,dal.price
      FROM 
          degreeamerica.affiliates daf,
          degreeamerica.allocations dal,
          (select pap.lead_price,pap.live, pap.allocation_id,pap.affiliate_id from paul.affiliates_price pap) pafp     
      WHERE
          dal.id=pafp.allocation_id and daf.id=pafp.affiliate_id
      ORDER BY daf.id;
      

      【讨论】:

      • 我已经使用笛卡尔积来做到这一点。我不需要任何连接,因为我需要将 tableA 的每一行与 tableB 的所有行映射 SELECT daf.id 作为affiliate_id,daf.name 作为affiliate_name,dal.name 作为allocation_name,dal.id 作为allocation_id,dal.allocation, dal.price FROM degreeamerica.affiliates daf,degreeamerica.allocations dal
      猜你喜欢
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2013-02-24
      • 2019-01-22
      • 2011-06-13
      • 2018-05-20
      • 1970-01-01
      相关资源
      最近更新 更多