0

#1054 - 「where 句」の列「色」が不明です。

私のクエリの簡略版は次のとおりです。

SELECT *, "red" AS colour
FROM (
    SELECT *,'calls' AS 'tbl', id AS cid FROM calls) as c
WHERE colour='red' 
ORDER BY colour ASC, c.created_date DESC

WHERE 行を削除すると、クエリが正常に実行され、色が認識され、すべてがうまくいきます。

どんな助けでも大歓迎です。

4

4 に答える 4

2

あなたの更新された質問については、私はあなたができると思います

SELECT * FROM (
SELECT *, "red" AS colour
FROM (
    SELECT *,'calls' AS 'tbl', id AS cid FROM calls) as c
) as v
WHERE colour='red' 
ORDER BY colour ASC, v.created_date DESC
于 2012-10-24T13:26:48.817 に答える
0

WHEREこれは、 andORDER BY句でエイリアスを使用できないためです。

だからあなたは次のようなことをしなければならないでしょう

SELECT *, IF(c.status = '1', "green", "red") AS colour
FROM (
    SELECT *,'calls1' AS 'tbl', id AS cid FROM calls1  
    WHERE uid LIKE '%1111%' 
    ORDER BY timestamp DESC
    UNION
    SELECT *,'calls2' AS 'tbl', id AS cid FROM calls2  
    WHERE uid LIKE '%1111%' 
    ORDER BY timestamp DESC
) as c
LEFT JOIN objects AS o ON o.call_id = c.id 
WHERE c.status = 'the color id you want' // or you can rewrite your if here
ORDER BY c.status ASC, c.timestamp DESC

またはこれはあなたの単純化されたクエリのために

SELECT *, "red" AS colour
FROM (
    SELECT *,'calls' AS 'tbl', id AS cid FROM calls) as c
WHERE c.status = 'the color id you want' 
ORDER BY c.created_date DESC

常に赤であるのに、なぜ色で並べ替えるのですか?

于 2012-10-24T13:12:46.390 に答える
0

where 句の列にエイリアスを使用するのは適切な方法ではありません。以下のリンクを参照してください。

http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html


標準 SQL では、WHERE 句での列エイリアスへの参照は許可されていません。この制限が課されるのは、WHERE 句が評価されるときに、列の値がまだ決定されていない可能性があるためです。たとえば、次のクエリは不正です。

SELECT id, COUNT(*) AS cnt FROM tbl_name  WHERE cnt > 0 GROUP BY id;

エイリアス名に HAVING を使用するか、条件を変更して WHERE 句で正確な列名を使用します。

于 2012-10-24T14:55:25.237 に答える
0

これを試してWHERE c.status !='1'

SELECT *, IF(c.status = '1', "green", "red") AS colour
FROM (
    SELECT *,'calls1' AS 'tbl', id AS cid FROM calls1  
    WHERE uid LIKE '%1111%' 
    ORDER BY timestamp DESC
    UNION
    SELECT *,'calls2' AS 'tbl', id AS cid FROM calls2  
    WHERE uid LIKE '%1111%' 
    ORDER BY timestamp DESC
) as c
LEFT JOIN objects AS o ON o.call_id = c.id 
WHERE c.status != '1'
ORDER BY colour ASC, c.timestamp DESC
于 2012-10-24T13:17:00.363 に答える