0

長い完全な名前を書かずに 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 ;
4

3 に答える 3

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;

PRODUCTS...しかし、CUSTOMERSテーブルに参加するためにどの基準を使用しているのかわかりません。

于 2009-09-25T15:50:41.723 に答える
2

問題は、暗黙の内部結合とそれに続く左結合です。MySQL は、CUSTOMERS c を考慮せずに、CUSTOMERSTATUSTYPES cs で PRODUCTS p に参加しようとしています。

これを試して:

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 のレコードに関連付ける句はありません...完全な結合を行っているだけです。これはあなたがやりたいことですか?

于 2009-09-25T15:52:48.160 に答える
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 ;
于 2009-09-25T15:49:56.183 に答える