为 1 个产品获得 1 个广告系列
您没有命名您的 RDBMS。在PostgreSQL或MySQL中,您可以使用LIMIT 1
.
SELECT p.Product, c.Camgaign
FROM p
LEFT JOIN c ON p.sold_date BETWEEN c.start AND c.end
WHERE p.Product = 'banana'
-- ORDER BY <something>
LIMIT 1;
LEFT [OUTER] JOIN
即使没有匹配的广告系列,我也会返回“香蕉”行。竞选就是NULL
在这种情况下。
用于通过一些可用的标准ORDER BY
来选择一个活动,而不是仅仅获得一个符合条件的任意一个。
在MS SQL中,您将使用SELECT TOP n
.
在甲骨文 WHERE rownum <= 1
中;
为所有产品获取 1 个广告系列
WITH x AS (
SELECT p.Product, c.Camgaign
,row_number() OVER (PARTITION BY p.Product) AS rn
FROM p
LEFT JOIN c ON p.sold_date BETWEEN c.start AND c.end
WHERE p.Product = 'banana'
)
SELECT Product, Camgaign
FROM x
WHERE rn = 1
OR rn IS NULL; -- to include prod. without campaign
在PostgreSQL中测试,在MS SQL Server或Oracle中工作。
不适用于既不支持 CTE 也不支持窗口函数的MySQL 。