2009-09-25 81 views
0

如何在不写入长全名的情况下选择p.Quota?现在我做从2个表中选择。 MySql

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 ; 
+0

为什么你不使用另一个JOIN的产品表?在表PRODUCTS中发布所有表的模式和外键的名称。 – 2009-09-25 15:49:21

回答

2

你混合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; 

...但我不知道你正在使用的加入PRODUCTSCUSTOMERS表的标准是什么。

+0

它现在的作品:) – 2009-09-25 16:19:27

0
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 ; 
+0

感谢您使用此代码段,该代码段可能会提供一些即时帮助。通过说明为什么这是一个很好的解决方案的问题,可以大大提高(https://meta.stackexchange.com/q/114762)其教育价值,并且可以使未来的读者更加有用,但不完全相同的问题。请编辑您的答案以添加解释,并指出适用的限制和假设。 – GrumpyCrouton 2017-10-16 19:58:51

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

而且,现在您对记录的客户那些产品没有任何条款...你只是做了充分的加入。这是你想要做的吗?