2012-07-30 35 views
0

我遇到了一些問題。我有3個表ProductVersion,DateSQL - 無效的查詢,因爲它不包含在聚合函數或組合子句中

依賴關係:

  • version.ProductId = Product.Id(有> = 1個版本的一個產品)
  • Date.VersionId = Version.ID(一對一)

我想對產品 - 版本,其中DateVersion是Max(對於每個產品)

類似於:

Product 1 - 1.0 
Product 2 - 0.9 etc 

我試着用下面的查詢:

SELECT 
    productName, versionName 
FROM 
    (SELECT 
     p.Name AS productName, v.Name AS versionName, MAX(d.Date) AS ddate 
    FROM 
     Product AS p 
    INNER JOIN 
     Version AS v ON v.ProductId = p.Id 
    INNER JOIN 
     Date AS d ON d.VersionId = v.Id 
    WHERE 
     (d.Date < { fn CURDATE() }) 
    GROUP BY p.Name) AS prd 

但我得到一個錯誤:

Column Version.Name is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

如何處理這個問題?

回答

1

您需要通過條款

SELECT productName, versionName 
FROM 
    (SELECT p.Name AS productName, v.Name AS versionName, MAX(d.Date) AS ddate 
    FROM Product AS p INNER JOIN Version AS v ON v.ProductId = p.Id 
    INNER JOIN VDate AS d ON d.VersionId = v.Id 
    WHERE (d.Date < { fn CURDATE() }) 
    GROUP BY p.Name, v.Name 
    ) AS prd 

編輯包括v.Name在一組。

select 
product.name, 
version.name 
    from 
product 
    inner join 
     version 
    on product.id = version.productid 
inner join 
    date on version.id = date.versionid 
inner join 
(
    select productid, MAX(date) as maxdate 
    from version 
     inner join date on version.id = date.versionid 
    group by productid 
) maxver 
    on date.date = maxver.maxdate 
    and version.productid = maxver.productid 
+0

我想說,但我有很多對1種產品。喜歡:產品1 - 0.1,產品1 - 0.2,產品1 - 0.3等。 – 2012-07-30 09:39:18

+0

啊,我明白了。請參閱編輯 – podiluska 2012-07-30 09:56:11

+0

謝謝!編輯版本正常工作;) – 2012-07-30 10:25:28

0

試試這個

SELECT p.Name AS productName, v.Name AS versionName 
FROM Product AS p INNER JOIN Version AS v ON v.ProductId = p.Id 
inner join 
(select VersionId,MAX(d.Date) from VDate group by Versionid) AS d 
on d.VersionId = v.Id 
WHERE and d.Date < { fn CURDATE() } 
GROUP BY p.Name,v.name 
相關問題