2014-07-04 44 views
0

我想用this答案做類似的事情,但我在第一行得到「沒有這樣的列」的錯誤!來自SELECT中JOIN的SQL SELECT

我的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子句中使用的條件,它可能在那裏。