2016-05-19 11 views
0

Ich versuche, eine SQL-Abfrage zu bauen, aber Ich erhalte die folgende Fehlermeldung:MYSQL: Unter Abfrage Hilfe in WHERE-Klausel

#1054 - Unknown column 'r.id' in 'where clause' 

Diese meine Frage ist:

SELECT *, COUNT(id) AS result_count 
    FROM rate_clicks AS rc 
    WHERE click_type = 'details' 
    AND created_at > 1463517035 
    AND rate <= (SELECT rate 
     FROM rates AS r 
     WHERE r.id = rc.rate_id) 
    GROUP BY rate_id 
    ORDER BY result_count DESC LIMIT 5 

I habe noch keine Subabfragen benutzt, also nehme ich an, dass ich hier versage. Ihre Hilfe wird gerne in Anspruch genommen!

+2

entfernen Backticks von r.id oder setzen r in Backticks eine ID in Backticks und tun es auch für 'rc.rate_id' –

+0

Können Sie yo teilen Ihre Tabellenstrukturen? – Jaumzera

Antwort

1

MySQL akzeptiert kein Alias ​​für Eltern in Unterabfrage. Sie sollten stattdessen beitreten:

SELECT *, COUNT(id) AS `result_count` 
FROM `rate_clicks` AS `rc` 
WHERE `click_type` = 'details' AND `created_at` > 1463517035 
AND `rate` <= (SELECT `rate` FROM `rates` AS `r` 
       inner join `rate_clicks` as rc1 `r.id`=`rc1.rate_id`) 
GROUP BY `rate_id` 
ORDER BY `result_count` DESC LIMIT 5 
1

ich poste es als Antwort. Sie haben die Verwendung falschen Backticks

Änderung dieses:

WHERE `r.id`=`rc.rate_id` 

zu

WHERE `r`.`id`=`rc`.`rate_id` 

Probe

MariaDB [bb]> SELECT * FROM useindex i WHERE `i.num1`= 999 LIMIT 10; 
ERROR 1054 (42S22): Unknown column 'i.num1' in 'where clause' 
MariaDB [bb]> 
MariaDB [bb]> SELECT * FROM useindex i WHERE `i`.`num1`= 999 LIMIT 10; 
+-------+------+------+ 
| id | num1 | num2 | 
+-------+------+------+ 
| 511 | 999 | 686 | 
| 1878 | 999 | 687 | 
| 3241 | 999 | 686 | 
| 3245 | 999 | 688 | 
| 4608 | 999 | 687 | 
| 5971 | 999 | 685 | 
| 5975 | 999 | 687 | 
| 7338 | 999 | 686 | 
| 8705 | 999 | 687 | 
| 10068 | 999 | 686 | 
+-------+------+------+ 
10 rows in set (0.00 sec) 

MariaDB [bb]>