Область применения подзапроса mysql - PullRequest
1 голос
/ 23 апреля 2011

Вот мой код:

SELECT field1, field2, 
       (SELECT * FROM table1 WHERE a = field2), 
       (SELECT COUNT(*) 
          FROM (SELECT * 
                  FROM table2 
                 WHERE c = field2) as t1) as count 
  FROM table3; 

... и вот сообщение об ошибке:

/ * Ошибка SQL (1054): неизвестный столбец 'field2' в 'where claus' * /

Я хочу выполнить один запрос, чтобы получить общее количество таблиц в таблице 2.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2011

Я переписал ваш запрос как:

   SELECT t3.field1, 
          t3.field2,
          t1.*,
          t2.cnt
     FROM TABLE3 t3
LEFT JOIN TABLE1 t1 ON t1.a = t3.field2
LEFT JOIN (SELECT t.c,
                  COUNT(*) AS cnt
             FROM TABLE2 t
         GROUP BY t.c) t2 ON t2.c = t3.field2

Ошибка 1054 вызвана ссылкой на field2 два подзапроса глубиной - большинство поддерживает только один уровень глубины.

0 голосов
/ 23 апреля 2011

Проблема в том, что вы пытаетесь использовать переменную, объявленную во внешнем запросе во внутреннем запросе. Переменные ограничены в SQL противоположным образом, у вас есть доступ только к внутренним запросам. То, что вы хотите сделать (я полагаю), это найти число table2, у которого c соответствует a из table1. Это должно дать вам ответ.

SELECT
    table1.a,
    table2.c,
    count(*)
FROM
    table1
JOIN
    table2 ON table2.c = table1.a
GROUP BY
    table1.a
...