2016-05-24 19 views
0

を設定する私は2つのテーブルカスタマー・アイテムを持っている利用可能な-場所私は、顧客の項目内のすべての項目が用意されていた場所を取得する必要があります。シンプルなインナーにSQL Serverのクエリが

カスタマー・アイテム

ItemID ItemName 
    1  item1  
    2  item2 
    3  item3  

利用-場所

LocationID ItemID  AvailableForPickup 
    20   1    1 
    20   2    1 
    20   3    0 
    21   1    1 
    21   2    1 
    21   3    1 

これは使用可能な-場所から項目3を除外します例えば

SELECT * FROM Customer-items 
INNER JOIN Available-locations 
ON Customer-items.ItemID = Available-locations.ItemsID AND AvailableForPicup = 1 

に参加L ocationID 20ただし、他の2つの項目は、locationID 20と、すべての項目21を返します。

結果セットを取得する必要があります。アイテムが利用できない場合は、場所のすべてのアイテムを除外します。

利用-locations_CustomerItems

LocationID ItemID  AvailableForPickup 
    21   1    1 
    21   2    1 
    21   3    1 

答えて

0
SELECT * FROM Customer-items 
INNER JOIN Available-locations 
ON Customer-items.ItemID = Available-locations.ItemsID AND locationId 
NOT IN (select locationID FROM Available-locations WHERE AvailableForPicup = 0) 
0
SELECT B.ITEMID 
    ,B.LOCATIONID 
    ,B.AVAILABLEFORPICKUP 
FROM #A A 
RIGHT JOIN #B B ON A.ITEMID = B.ITEMID 
WHERE B.AVAILABLEFORPICKUP= 1 
0

次にNOT INを使用することができます。

SELECT l.* 
FROM [Customer-items] AS i 
INNER JOIN [Available-locations] AS l ON i.ItemID = l.ItemID 
WHERE l.LocationID NOT IN (SELECT LocationID FROM [Available-locations] WHERE AvailableForPicup = 0) 

注意を-は、テーブル名に使用できないこと。 [customer-items]のような表名に角括弧[]を使用する必要があります。また、テーブルにエイリアス名を使用すると、読みやすくなります。

OUTPUT

LocationId ItemId AvailableForPickup 
21   1  1 
21   2  1 
21   3  1 
0
select * from Customer-items 
join Available-locations 
on Customer-items.ItemID = Available-locations.ItemsID 
where Available-locations.LocationID in 
(select LocationID from Available-locations where AvailableForPickup = 1) 
0

は、以下のコードを使用してください。それはSQL Server 2012でうまくいきます。

DECLARE @Customer_Items TABLE (ItemsID int,ItemName VARCHAR(10)) 
DECLARE @Available_Locations TABLE (LocationID int,ItemsID int,AvailableForPickup int) 
INSERT INTO @Customer_Items (ItemsID,ItemName) 
VALUES 
(1,'item1'), 
(2,'item2'), 
(3,'item3') 
INSERT @Available_Locations 
(LocationID,ItemsID, AvailableForPickup) 
VALUES 
(20,1,1), 
(20,2,1), 
(20,3,0), 
(21,1,1), 
(21,2,1), 
(21,3,1) 

SELECT LocationID,al.ItemsID,AvailableForPickup FROM @Customer_Items ci 
INNER JOIN @Available_Locations al 
ON ci.ItemsID = al.ItemsID AND al.AvailableForPickup = 1 
WHERE al.LocationID NOT IN (SELECT al2.LocationID FROM @Available_Locations al2 WHERE al2.AvailableForPickup =0)