2016-12-27 27 views
2

選擇行我有3個表:怎麼就不能與鏈接表

房屋

-------------------------------------------------- 
| ID  | STORE   | 
-------------------------------------------------- 
| - 1 | Store1 | 
-------------------------------------------------- 
| - 2 | Store2 | 
-------------------------------------------------- 
| - 3 | Store3 | 
-------------------------------------------------- 
| - 4 | Store4 | 
-------------------------------------------------- 

用戶

-------------------------------------------------- 
| ID  | USER   | 
-------------------------------------------------- 
| - 1 | User1 | 
-------------------------------------------------- 
| - 2 | User2 | 
-------------------------------------------------- 
| - 3 | User3 | 
-------------------------------------------------- 
| - 4 | User4 | 
-------------------------------------------------- 

User_stores

-------------------------------------------------- 
| USER  | STORE   | 
-------------------------------------------------- 
| --- 1 -- | ----1----- | 
-------------------------------------------------- 
| --- 1 -- | ----2----- | 
-------------------------------------------------- 
| --- 2 -- | ----1----- | 
-------------------------------------------------- 
| --- 2 -- | ----2----- | 
-------------------------------------------------- 
| --- 3 -- | ----3----- | 
-------------------------------------------------- 

我用這爲我的選擇。

SELECT S.id, S.store 
FROM stores S 
JOIN user_stores L 
ON S.id = L.store 
JOIN users U 
ON U.id = L.user 
WHERE L.user <> ? 

我的問題:

我想選擇每個鏈接到任何人,除當前用戶(也就是用戶ID)店。該查詢確實選擇了未鏈接​​到當前用戶的商店,但仍存在問題。

我的查詢仍然會選擇當前用戶擁有的商店,只有當另一個用戶也有該商店鏈接到它(因爲這是一個鏈接到其他用戶的行)。

是否有可能從select語句中排除這些條目,只有用戶標識可用?

解決

SELECT S.id, S.store 
FROM stores S 
JOIN user_stores L 
ON S.id = L.store 
JOIN users U 
ON U.id = L.user 
and L.user <> ? 
and S.id not in (
select L.store from user_stores L 
where L.user = ? 
); 

回答

1

您可以使用NOT IN篩選出給定用戶擁有實體店:

SELECT S.id, S.store 
FROM stores S 
JOIN user_stores L 
ON S.id = L.winkel 
JOIN users U 
ON U.id = L.user 
and L.user <> ? 
and s.store not in (
    select store from user_stores u 
    where user = ? 
); 
+0

我不知道有可能把一個select語句放在一個not in()之類的東西里。你每天學習新的東西!該查詢不適用於我不幸的。它產生相同的結果加上用戶已有的商店。 –

+0

已更新。你可以再試一次嗎? – GurV

+0

現在有效。我在結尾選擇語句中添加了一些別名。然後它工作。 –

0

我會使用條件聚集在在商店解決這個問題User_stores表。出現在HAVING條款中的兩個條件檢查商店是否有除一個用戶以外的所有用戶,並且未關聯的用戶是您選擇的用戶(由問號表示)。

SELECT STORE 
FROM User_stores 
GROUP BY STORE 
HAVING COUNT(DISTINCT USER) = (SELECT COUNT(*) FROM Users) - 1 AND 
     SUM(CASE WHEN USER = ? THEN 1 ELSE 0 END) = 0