SQL Server 2008 - ограничение запросов по FK - PullRequest
1 голос
/ 20 сентября 2009

У меня есть следующий запрос, который выполняет полнотекстовый поиск (CONTAINSTABLE) в таблице Products и возвращает 1 запись.

На каждый Продукт ссылается таблица ShopProducts (каждый ShopProduct представляет продукт в магазине и имеет внешний ключ для Products. ProductId . Каждая строка в таблице ShopProducts имеет столбец ShopId .

У меня вопрос - как я могу ограничить приведенный ниже запрос только возвратом Продуктов , которые не имеют ShopProduct для ShopId, указанного в @ShopId переменная

DECLARE @ShopId uniqueidentifier
DECLARE @FullTextQuery nvarchar(1000)

SET @ShopId = 'a7e7d519-27f0-4d95-a1dd-87d992a0478c'

SET @FullTextQuery = 'ISABOUT("*Palmolive*","*Naturals*","*Shower*","*Milk*","*Nourishing*","*With*","*Honey*")'


SELECT TOP 1
       ftt.RANK,
       p.ProductId, 
       p.SearchableDescription
 FROM Products p
 JOIN CONTAINSTABLE(Products, 
                    SearchableDescription, 
                    @FullTextQuery) AS ftt ON ftt.key = p.ProductId 
ORDER BY ftt.RANK DESC

Ответы [ 2 ]

0 голосов
/ 21 сентября 2009

Как насчет

WITH ProductsExcept(ProductId,SearchableDescription) as (
  SELECT ProductId, SearchableDescription
  FROM Products p
  WHERE NOT EXISTS (
    SELECT * FROM ShopProducts
    WHERE ShopProducts = ProductID
    AND ShopID <> @ShopId 
  )
)
  SELECT  
    ftt.RANK,
    p.ProductId, 
    p.SearchableDescription
 FROM ProductsExcept p
 JOIN CONTAINSTABLE(Products, 
                    SearchableDescription, 
                    @FullTextQuery) AS ftt ON ftt.key = p.ProductId 
ORDER BY ftt.RANK DESC
0 голосов
/ 20 сентября 2009
SELECT TOP 1
 ftt.RANK, p.ProductId, p.SearchableDescription
FROM Products p
INNER JOIN CONTAINSTABLE(Products, SearchableDescription, @FullTextQuery) AS ftt
 ON ftt.[KEY]=p.ProductId
LEFT OUTER JOIN ShopProduct s
 ON (p.ProductId = s.ProductId AND s.ShopId = @ShopId)
WHERE s.ProductId IS NULL
ORDER BY ftt.RANK DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...