2013-05-16 20 views
0

我在想爲什麼這個MySQL查詢不起作用。使用連接和嵌套選擇嘗試編譯用戶信息列表時出錯

MySQL正在申報「你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的'訂閱AS子INNER JOIN正確的語法手冊(SELECT UserID如UID從subscriptions「位於第1" 行

目標:我試圖讓所有的都在指定用戶的房間的用戶的不同的用戶信息列表

表結構:
‘訂閱’表結構 - 表用戶所在的所有房間的總數
- SubscriptionID (自動遞增)
- RoomID
- 用戶名

「用戶」 表結構 - 表包括用戶帳戶的詳細信息
- ID(自動遞增)
- 綽號
- 狀態
- 約
- 等。

查詢,我至今:

SELECT * from 'subscriptions' AS sub 
    INNER JOIN (SELECT `UserID` as uid from `subscriptions` WHERE RoomID = sub.RoomID)t on  t.uid = users.id 
    WHERE sub.UserID = '1' 

我已經完成了一些以上述方式獲取用戶信息的東西..但我一直在尋找一種稱爲「性能」的升級。爲了執行類似於上面列出的操作,我必須首先獲得用戶所在房間的明確列表。然後,獲取用戶所在房間中所有用戶的明確列表。然後,將每個房間中的所有成員編譯到一個列表中,並分別爲每個找到的用戶查詢用戶信息表。當然有一個更有效率和更合乎邏輯的方式來實現這個目標。

+1

選擇訂閱*:使用反引號不單引號 –

+0

這是相當愚蠢的錯誤..但現在它拋出「#1054 - 未知列'sub.RoomID'在'where子句'」 – Harold

回答

0

您不能在from子句中執行相關子查詢。您查詢的是:

SELECT * 
from 'subscriptions sub INNER JOIN 
     (SELECT `UserID` as uid 
     from `subscriptions` 
     WHERE RoomID = sub.RoomID 
    ) t 
     on t.uid = users.id 
WHERE sub.UserID = '1'; 

我也固定user.idsub.id

SELECT * 
from subscriptions sub INNER JOIN 
    subscriptions t 
    on t.uid = sub.id and t.roomId = sub.RoomId 
WHERE sub.UserID = '1'; 

不過,我想你想:

select * 
from subscriptions s 
where s.roomId in (select roomId from subscriptions s2 where s2.UserId = '2') 
+0

那麼這並不難一切!謝謝。 (最後一個正是我所期待的) – Harold

相關問題