2017-01-28 7 views
0

私の元の質問はここにある:今MySQLの選択条件(その2)

SELECT id 
FROM leads t JOIN 
     (SELECT "OKQ" as status, 86400 as diff UNION ALL 
     SELECT "PI" as status, 3600 as diff UNION ALL 
     SELECT "CBK" as status, 60 as diff UNION ALL 
     SELECT "NRP" as status, 3600 as diff UNION ALL 
     SELECT "NEW" as status, 1 as diff 
     ) s 
ON t.status = s.status 
WHERE t.time > date_sub(now(), interval s.diff second) 
ORDER BY RAND() LIMIT 1 

mySQL conditional select?

が今私の本当の状況にゴードン・リノフによって提案された第二のコードを適応した後、クエリは次のようになりsouldこのクエリはエラーをスローします:

ErreurColumn 'status' in field list is ambiguous 
+3

は、あなたがこのエラーが発生したクエリでよろしいですか? 'status'カラムが' alias' nameと一緒に使われるので、このクエリでそのエラーを受け取る可能性はありません –

+0

はい、カラム自体のステータスは – medk

+1

です。また、文字列リテラルは二重引用符ではなく二重引用符で囲まれていません'Mysql'がどのように二重引用符を使用するかはわかりません。一部の 'Dbms'では' identifier 'に二重引用符が使用されています –

答えて

1

あなたの質問は、このエラーを生成できません。すべての列名が修飾されている場合、エラーは発生しません(修飾されていない唯一の名前はidです)。

SELECTには、idより多くの列が含まれている可能性があります。あなたはどちらかSELECT t.*べきか、別の方法は、USING句を使用することです:

SELECT . . . 
FROM leads t JOIN 
    (SELECT 'OKQ' as status, 86400 as diff UNION ALL 
     SELECT 'PI' as status, 3600 as diff UNION ALL 
     SELECT 'CBK' as status, 60 as diff UNION ALL 
     SELECT 'NRP' as status, 3600 as diff UNION ALL 
     SELECT 'NEW' as status, 1 as diff 
    ) s 
    USING (status) 
WHERE t.time > date_sub(now(), interval s.diff second) 
ORDER BY RAND() 
LIMIT 1; 
関連する問題