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

Sql server 2005 根据名称选择广告商,但也包括其父广告商的名称,sql-server-2005,Sql Server 2005,我有三张桌子: 广告商:制作广告的企业列表,广告商:广告商自己和广告商孩子:广告商家长表;请注意,这是一个扁平的层次结构,单个广告客户可以与家长一起多次列出,如果他们只是“家长”,则不知道“级别” 所以,我试图选择所有在特定日期之间有广告的广告商,他们的名字与用户输入匹配。问题在于,这个名字也可以与家长广告客户匹配。让我试着换一种说法,只要孩子在指定日期之间有一些有效的广告,用户输入就可以匹配父母或孩子广告商的名称 我只是在获取家长信息的概念上遇到了问题: SELECT NewsPape

我有三张桌子:

广告商:制作广告的企业列表,广告商:广告商自己和广告商孩子:广告商家长表;请注意,这是一个扁平的层次结构,单个广告客户可以与家长一起多次列出,如果他们只是“家长”,则不知道“级别”

所以,我试图选择所有在特定日期之间有广告的广告商,他们的名字与用户输入匹配。问题在于,这个名字也可以与家长广告客户匹配。让我试着换一种说法,只要孩子在指定日期之间有一些有效的广告,用户输入就可以匹配父母或孩子广告商的名称

我只是在获取家长信息的概念上遇到了问题:

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')
好的,我想我有了


谢谢。

我假设层次结构是用广告客户表中的ParentID或类似列定义的。那么类似的方法可能会奏效:

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和广告商对我说的话不一样;缩写的意义是什么?2不要在日期/时间范围查询中使用BETWEEN。。。虽然数据类型为DATE是可以的,但在您的场景中不能是这种情况,因为您使用的是SQLServer2005。3不要对字符串文字使用区域格式,如m/d/y。事实上,我仍然不确定你的查询应该在4月1日还是1月4日结束。根据语言和区域设置,SQL Server可能也会出错。

Date的数据类型是smalldatetime。