2016-06-05 3 views
0

я затем 3 других SO ответов, и они говорят, что это работает .. но здесь нет ... вот моя проблема, у меня есть этот вопрос:не может рассчитывать результаты присоединяемой таблицы MYSQL

SELECT 
    q.* 
FROM relacionamento AS r 
INNER JOIN questoes AS q ON r.idquestao = q.id 
WHERE tabela = 'disciplina' 
GROUP BY q.id 

Этих есть результат запроса: Query Result

до здесь, он не был идеальным .. Теперь мне нужно знать, как возвращается много строк ... я изменил запрос к этому:

SELECT 
    COUNT(q.*) 
FROM relacionamento AS r 
INNER JOIN questoes AS q ON r.idquestao = q.id 
WHERE tabela = 'disciplina' 
GROUP BY q.id 

И получил эту ошибку:

Error when counting

Почему я не могу подсчитать, сколько строк я получил?

UPDATE: Я попытался сделать этот запрос также:

SELECT 
    COUNT(*) 
FROM relacionamento AS r 
INNER JOIN questoes AS q ON r.idquestao = q.id 
WHERE tabela = 'disciplina' 
GROUP BY q.id 

И получить это как результат:

Count(*)Result

+0

Вы можете разместить весь запрос, в котором вы использовали '' COUNT (д. *)? – user212514

+0

@ user212514 да, но тот же, что и первый. Просто изменил вторую строку ... 1 секунду обновление i1ll с полным запросом –

+0

@ user212514, нормально, только что обновлено ... –

ответ

2

Вы можете изменить его, как это:

SELECT COUNT(*) FROM (
    SELECT 
     q.* 
    FROM relacionamento AS r 
    INNER JOIN questoes AS q ON r.idquestao = q.id 
    WHERE tabela = 'disciplina' 
    GROUP BY q.id 
) 
1

Вы г-запрос, вероятно, лучше записать в виде:

SELECT q.* 
FROM questoes q 
WHERE EXISTS (SELECT 1 
       FROM relacionamento r 
       WHERE r.idquestao = q.id AND r.tabela = 'disciplina' 
      ); 

Это должно быть более эффективным, чем запрос, если у вас есть указатель на relacionamento(idquestao, tablea) (который вы хотели бы в любом случае для join). И он не использует select * с group by, что обычно выглядит неправильно.

Затем, чтобы получить количество, вы можете просто сделать count(*):

SELECT COUNT(*) 
FROM questoes q 
WHERE EXISTS (SELECT 1 
       FROM relacionamento r 
       WHERE r.idquestao = q.id AND r.tabela = 'disciplina' 
      ); 
+0

, почему этот запрос должен быть более эффективным? – bugwheels94

+0

@ пользователь1533609. , , Он не выполняет агрегацию по всему набору данных. –

+0

Это не сработало ... возвращает ошибку ... –