从产品表中选择产品

时间:2016-09-01 13:09:30

标签: php sql sql-server

我想从products表中选择行。 产品基于season

每个产品row/entity都包含一个名为id_season

的列

seasons表看起来像

id | season_name | active | created | modified

季节名称是2016,2017,2018年...

我想选择2016年和2017年具有相同code

的所有产品

我有一个简单的选择,如

SELECT *
FROM products P
INNER JOIN seasons S ON S.id = P.id_season
WHERE S.active = 1
AND S.season_name IN ( YEAR(GETDATE()), YEAR(GETDATE()) + 1  )

但不知道如何改进它,以匹配不同季节的产品代码。

2 个答案:

答案 0 :(得分:1)

尝试使用以下代码..

;WITH cte_1
AS
(SELECT *,COUNT(p.code) OVER(partition by p.code Order by  p.code) cnt
 FROM products P
   INNER JOIN seasons S ON S.id = P.id_season
WHERE S.active = 1
AND S.season_name IN ( YEAR(GETDATE()), YEAR(GETDATE()) + 1  )) -- or simply put IN ('2016','2017')
SELECT *
FROM cte_1
WHERE cnt>1

或者您可以使用如下的子查询格式。

SELECT *
FROM
(SELECT *,COUNT(p.code) OVER(partition by p.code Order by  p.code) cnt
 FROM products P
   INNER JOIN seasons S ON S.id = P.id_season
WHERE S.active = 1
AND S.season_name IN ( YEAR(GETDATE()), YEAR(GETDATE()) + 1  )) t
WHERE  t.nt>1

答案 1 :(得分:0)

您可以使用内部查询,如下所示:

 SELECT * FROM products
 where id_season in (Select id from seasons where
 season_name IN ( YEAR(GETDATE()), YEAR(GETDATE()) + 1  ));
相关问题