2014-07-04 10 views
0

Я пытаюсь использовать this Ответ, чтобы сделать что-то подобное, но я получаю ошибку «такого столбца» на первой строке!SQL SELECT из SELECT в JOIN

мой SQL код выглядит следующим образом:

SELECT product.id, T2.[tt] 
FROM product 
JOIN (
SELECT reviews.product_id, AVG(reviews.rating) AS [tt] 
FROM reviews 
WHERE ... 
GROUP BY reviews.product_id) T2 
ON product.id = T2.product_id 
WHERE ... 
+1

Mysql, sql server, oracle? – Mihai

+0

Попробуйте удалить '[]' – Mihai

+0

Мне нужно это в oracle Я думаю, я использую SQLite atm – user3795356

ответ

-1

Это случилось со мной раньше (в более старых версиях MySQL если не ошибаюсь). Вы должны дать псевдоним для каждой таблицы:

SELECT pro.id, T2.[tt] 
FROM product pro 
JOIN (
SELECT reviews.product_id, AVG(reviews.rating) AS [tt] 
FROM reviews 
WHERE ... 
GROUP BY reviews.product_id) T2 
ON pro.id = T2.product_id 
WHERE ... 
+0

Не правда. По крайней мере, в MySQL нет необходимости определять псевдонимы для каждой таблицы – Barranka

+0

nope, такая же ошибка – user3795356

+0

добавление псевдонимов в подзапросы является хорошей практикой даже в MySQL, а Barranka - правильная в некоторых dbms, она обязательна - но это не проблема здесь вызывающе –

0

Может снять квадратные скобки и as может помочь вам:

select product.id, t2.tt 
from 
    product 
    join (
     select product_id, avg(rating) tt 
     from reviews 
     where -- Your where conditions for the reviews table 
    ) t2 on product.id = t2.product_id 
where -- More where conditions 

Кроме того, рассмотреть не используя подзапрос. Если ваш запрос так же, как это, вы могли так что-то более простое:

select product.id, avg(reviews.rating) tt 
from 
    product 
    join reviews on product.id = reviews.product_id 
where -- All the conditions you need to define 

Если есть строки в product таблицы, которые не имеют соответствия записей в reviews таблице, но вы все еще хотите, чтобы они были на результат , рассмотреть вопрос об использовании left join:

select product.id, avg(reviews.rating) tt 
from 
    product 
    left join reviews on product.id = reviews.product_id 
where 
    reviews.product_id is null 
    or reviews.product_id is not null and (
     -- All the conditions you need to define for the matching rows in the 
     -- reviews table 
    ) 
0

запрос, который вы в настоящее время показывают в вопросе (если убрать []) будет работать в обоих SQLite & Oracle. Поэтому он не отображается выше или не может быть просмотрен только через код запроса. Проверьте определения таблиц; это может быть простое имя неправильного поля.

Обратите внимание, что вы не указали условия, используемые в разделе where where, оно может быть там.