【问题标题】:selecting from 2 tables. MySql从 2 个表中选择。 mysql
【发布时间】:2009-09-25 15:42:54
【问题描述】:

如何在不写长全名的情况下选择 p.Quota?现在我在做

SELECT c.id, 
       c.UserName, 
       p.Quota, 
       cs.StatusName 
  FROM CUSTOMERS AS c, 
       PRODUCTS AS p 
 LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId=cs.CustomerStatusId 
 LIMIT 1 ;

我得到错误:

ERROR 1054 (42S22): Unknown column 'c.StatusId' in 'on clause'

但是该列确实退出并且此代码有效:

SELECT c.id, 
       c.UserName, 
       cs.StatusName 
  FROM CUSTOMERS AS c
  JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId = cs.CustomerStatusId 
 LIMIT 1 ;

【问题讨论】:

  • 为什么不使用另一个 JOIN for PRODUCTS 表?在表 PRODUCTS 中发布所有表的架构和外键名称。

标签: mysql sql mysql-error-1054


【解决方案1】:

您正在混合使用 ANSI 和非 ANSI JOIN 语法:

SELECT c.id, 
       c.UserName, 
       p.Quota, 
       cs.StatusName 
  FROM CUSTOMERS AS c, 
       PRODUCTS AS p 
  LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId=cs.CustomerStatusId 
  LIMIT 1 ;

使用 ANSI 连接编写:

     SELECT c.id, 
            c.UserName, 
            p.Quota, 
            cs.StatusName 
       FROM CUSTOMERS AS c 
       JOIN PRODUCTS AS p ON --JOIN criteria goes here
  LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId = cs.CustomerStatusId 
      LIMIT 1;

...但我不知道您使用什么标准将PRODUCTS 加入CUSTOMERS 表。

【讨论】:

    【解决方案2】:

    问题是您的隐式内部联接后跟左联接。 MySQL 试图在 CUSTOMERSTATUSTYPES cs 上加入 PRODUCTS p,而不考虑 CUSTOMERS c。

    试试这个:

    SELECT 
     c.id, c.UserName, p.Quota, cs.StatusName 
    FROM 
     CUSTOMERS AS c 
     INNER JOIN PRODUCTS AS p 
     LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId=cs.CustomerStatusId 
    LIMIT 1 

    另外,现在您没有将 CUSTOMERS 中的记录与 PRODUCTS 中的记录相关联的子句...您只是在进行完全联接。这是你想做的吗?

    【讨论】:

      【解决方案3】:
      SELECT c.id, 
             c.UserName, 
             p.Quota, 
             cs.StatusName 
      FROM (CUSTOMERS AS c, PRODUCTS AS p) 
      LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId=cs.CustomerStatusId 
      LIMIT 1 ;
      

      【讨论】:

      • 感谢您提供此代码 sn-p,它可能会提供一些即时帮助。正确解释would greatly improve 其教育价值,通过说明为什么这是解决问题的好方法,并使其对未来有类似但不相同问题的读者更有用。请编辑您的答案以添加解释,并说明适用的限制和假设。
      猜你喜欢
      • 2023-03-26
      • 2013-09-04
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多