Ошибка SQL-запроса: «не знает columnName» в предложении Where - PullRequest
1 голос
/ 02 августа 2011

Любой может помочь мне, я немного застрял.

У меня есть этот запрос, который работает как брелок

SELECT * , 
       matches - falsepositives AS hits
FROM (
    SELECT c. * , 
           IFNULL( p.total, 0 ) AS matches, 
            (
                SELECT COUNT( * ) 
                FROM ci_falsepositives n
                WHERE n.addressbook_id = c.reference
                AND n.sanction_key
                IN (
                    SELECT sanction_key
                    FROM ci_matched_sanctions
                )
            ) AS falsepositives
    FROM ci_address_book c
    LEFT JOIN (
        SELECT addressbook_id, 
               COUNT( match_id ) AS total
        FROM ci_matched_sanctions
        GROUP BY addressbook_id
    ) AS p 
        ON c.id = p.addressbook_id
) AS S
WHERE matches > 0
ORDER BY hits DESC

Но я хотел бы изменить его, чтобы отсортировать, где HITSбольше 0, но он говорит мне, что не знает хитов ... Это потому, что это расчет 2 предметов?

1 Ответ

3 голосов
/ 02 августа 2011

Нельзя использовать столбец псевдонимов в предложении WHERE.Вам нужно переписать его:

SELECT * , 
       matches - falsepositives AS hits
FROM (
    SELECT c. * , 
           IFNULL( p.total, 0 ) AS matches, 
            (
                SELECT COUNT( * ) 
                FROM ci_falsepositives n
                WHERE n.addressbook_id = c.reference
                AND n.sanction_key
                IN (
                    SELECT sanction_key
                    FROM ci_matched_sanctions
                )
            ) AS falsepositives
    FROM ci_address_book c
    LEFT JOIN (
        SELECT addressbook_id, 
               COUNT( match_id ) AS total
        FROM ci_matched_sanctions
        GROUP BY addressbook_id
    ) AS p 
        ON c.id = p.addressbook_id
) AS S
WHERE matches - falsepositives > 0
ORDER BY hits DESC

Или использовать подзапрос:

SELECT * FROM (
    SELECT * , 
           matches - falsepositives AS hits
    FROM (
        SELECT c. * , 
               IFNULL( p.total, 0 ) AS matches, 
                (
                    SELECT COUNT( * ) 
                    FROM ci_falsepositives n
                    WHERE n.addressbook_id = c.reference
                    AND n.sanction_key
                    IN (
                        SELECT sanction_key
                        FROM ci_matched_sanctions
                    )
                ) AS falsepositives
        FROM ci_address_book c
        LEFT JOIN (
            SELECT addressbook_id, 
                   COUNT( match_id ) AS total
            FROM ci_matched_sanctions
            GROUP BY addressbook_id
        ) AS p 
            ON c.id = p.addressbook_id
    ) AS S
) AS S2
WHERE hits > 0
ORDER BY hits DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...