首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据名称选择广告商,但也包括其父广告商的名称

根据名称选择广告商,但也包括其父广告商的名称
EN

Stack Overflow用户
提问于 2012-05-15 05:54:24
回答 1查看 24关注 0票数 1

我有三张表:

广告商:生产广告的企业列表,广告:广告本身和AdvertiserChild:广告商父表;请注意,这是一个扁平的层次结构,单个广告商可以与父商一起被多次列出,如果他们仅仅是“父母”,则没有关于“级别”的提示。

因此,我正在尝试选择所有在特定日期之间有广告的广告商,他们的名称与用户输入的内容相匹配。问题是,名称也可以与父广告商相匹配。让我试着换一种说法,只要孩子在指定的日期之间有一些有效的广告,用户输入就可以匹配父广告商或子广告商的名字。

我只是在概念上遇到了问题,无法将家长信息放入其中:

代码语言:javascript
复制
SELECT     NewsPaperAd.AdvertiserID AS ADID, Advertiser.NameAbbrev AS Name
FROM         NewsPaperAd INNER JOIN
                  Advertiser ON NewsPaperAd.AdvertiserID = Advertiser.AdvertiserID
WHERE     (NewsPaperAd.PubDate BETWEEN '1/1/2012' AND '4/1/2012')

好了,我想我找到了!

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-15 07:24:35

我假设在Advertiser表中使用ParentID或类似的列来定义层次结构。那么像这样的东西可能会起作用:

代码语言:javascript
复制
DECLARE @search NVARCHAR(255);
SET @search = '%some search phrase%';

;WITH a AS
(
  SELECT a.AdvertiserID, a.NameAbbrev, Parent = p.NameAbbrev
    FROM dbo.Advertiser AS a
    LEFT OUTER JOIN dbo.Advertiser AS p
    ON a.ParentID = p.AdvertiserID
    WHERE a.NameAbbrev LIKE @search
    OR p.NameAbbrev LIKE @search
)
SELECT ADID = a.AdvertiserID, a.NameAbbrev, a.Parent
  FROM dbo.NewsPaperAd AS n
  INNER JOIN a
  ON a.AdvertiserID = a.AdvertiserID
  WHERE n.PubDate >= '20120101'
  AND n.PubDate < '20120401';

一些建议:(1)不要更改列输出名称。ADID对我来说与AdvertiserID不是一回事;缩写的意义是什么?(2)不要将BETWEEN用于日期/时间范围查询……虽然您的数据类型是DATE是可以的,但在您的方案中不可能是这种情况,因为您使用的是SQL Server2005。(3)不要对字符串文字使用m/d/y这样的区域格式。事实上,我仍然不确定您的查询是在4月1日结束,还是在1月4日结束。根据语言和区域设置的不同,SQL Server也可能会出错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10591595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档