2015-11-04 51 views
0

我有兩個表SQL一對多條件問題

Table1 (Users) 
ID, NAME,  COUNTRY 
1, Joe Bloggs, 1 
2, Joe Jnr,  1 
3, Joe Snr,  2 

Table2 (Orders) 
UsersID, Product 
1,  Apple TV 
1,  iPad Pro 
1,  MacBook Pro 
2,  iPad Mini 
2,  iPad Pro 
3,  iPad Air 
3,  iPad Pro 

,如果我想,如果用戶居住在鄉村的產品列表買= 1

Select Orders.Product from users left join Users.ID = ORDERS.ID WHERE COUNTRY = 1 

工作正常

如果什麼儘管我想要一份購買產品的清單,如果用戶居住在國家= 1且帶來了macbook Pro(但不會顯示列表中的macbook pro)

所以只是顯示

AppleTV 
iPAD pRO 
+0

你是什麼意思(但不顯示列表中的macbook pro)?你能提供一個你的查詢樣本輸出以便更好地理解嗎? – Patrick

回答

1

寫在傳統的SQL你有一個分層的子選擇。 應該工作的代碼:

Select Product from Orders 
Where Product <> 'MacBook Pro' -- you don't want MacBook Pro in results 
and UsersID in 
(Select ID from Users 
where country = '1' --get all Country 1 users that Purchased MacBooks 
and ID in 
(Select B.UsersID 
    from Orders B --- aliased for clarity 
    where Product = 'MacBook Pro')) 
1

對此的簡單回答很簡單。首先,選擇誰買了一臺MacBook Pro和誰生活在該國的用戶:

SELECT T_USERS.id 
FROM Users T_USERS INNER JOIN Orders T_ORDERS 
ON (T_USERS.id = T_ORDERS.UsersID) 
WHERE T_USERS.Country = 1 
    AND T_ORDERS.product = 'MacBook Pro' 

,然後,用它在一個子查詢,以獲得用戶和避免含有的MacBook產品行:

SELECT Product 
FROM Orders 
WHERE product <> 'MacBook Pro' 
     AND UsersID IN (SELECT T_USERS.id 
         FROM Users T_USERS INNER JOIN Orders T_ORDERS 
         ON (T_USERS.id = T_ORDERS.UsersID) 
         WHERE T_USERS.country = 1 
           AND T_ORDERS.product = 'MacBook Pro') 

它工作得很好。

0
 Select distinct o1.Product 
     from Orders o1 
     inner join Orders o2 
     on o1.UserId = o2.UserId 
     and o2.Product = 'MacBook Pro' 
     inner join Users u 
     on o1.UserId = u.Id 
     where o1.Product <> 'MacBook Pro' 
     and u.country = 1 
     order by o1.Product