/ / Избор на рекламодатели от името, но включително и имената на техните родители-рекламодатели - sql-server-2005

Избор на рекламодатели от името, но включително и имената на техните родители-рекламодатели - sql-server-2005

Имам три маси:

рекламодатели: списък на бизнеса, който произвежда реклами, Adverts: самите реклами и AdvertiserChild: таблица на родителите на рекламодатели; имайте предвид, че това е плоска йерархия и един рекламодател може да бъде изброяван многократно с родител, без да се описва „ниво“, при условие че те са просто „родители“.

И така, аз се опитвам да избера всички рекламодателикоито имаха реклами между определени дати, където имената им съвпадат с въвеждането на потребителите. Ударът е, че името може да съответства и на родителски рекламодател. Позволете ми да опитам, че по различен начин, потребителският вход може да съответства на името на родителя или на детския рекламодател, стига детето да има някои валидни реклами между посочените дати.

Просто концептуално имам проблеми по отношение на получаването на информация за родителите там:

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")

Ок, мисля, че го имам!

Благодаря.

Отговори:

0 за отговор № 1

Предполагам, че йерархията е дефинирана с 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 не ми казва същото като AdvertiserID; какъв е смисълът на абревиатурата? (2) Не използвайте BETWEEN за заявки за дата / време ... докато добре е, ако типът ви данни е DATE, това не може да бъде в сценария ви, тъй като използвате SQL Server 2005. (3) Не използвайте регионално форматиране като m / d / y за низови литерали. Всъщност Все още не съм сигурен дали вашето запитване трябва да приключи на 1 април или 4 януари. В зависимост от езиковите и регионалните настройки SQL Server може също да сгреши.