2014-03-27 178 views
1

我想從我的數據庫中的消息表中爲單個用戶提取消息,我寫的查詢有一些語法問題,但我不知道如何解決它。請幫助Sql In子句語法查詢錯誤

SELECT * 
FROM Messages 
WHERE SenderId = (SELECT UserId FROM Users WHERE ContactNo = 03005114812) 
    or ReceiverId = (SELECT UserId FROM Users WHERE ContactNo = 03005114812) 
    IN (SELECT * FROM Messages WHERE SenderId = 1 or ReceiverId = 1) 
+0

你在找什麼?用戶1與聯繫人號碼爲03005114812的用戶之間的所有消息?如果不是這樣,那麼請添加更多關於您想要查找的內容的解釋。一些樣本數據和預期結果不會受到影響。 –

+0

@Damien_The_Unbeliever是先生我想找到用戶1和ContactNo = 03005114812 – ShodowOverRide

回答

1

無需一個IN()搜索

SELECT * 
FROM Messages 
WHERE 
    (SenderId = (SELECT UserId FROM Users WHERE ContactNo = 03005114812) and 
    ReceiverId = 1) or 
    (ReceiverId = (SELECT UserId FROM Users WHERE ContactNo = 03005114812) and 
    SenderId = 1) 

或者:

SELECT m.* 
FROM Messages m 
     INNER JOIN 
    Users u 
     on 
      (m.SenderId = u.UserId and m.ReceiverId = 1) or 
      (m.ReceiverId = u.UserId and m.SenderId = 1) 
WHERE 
    u.ContactNo = 03005114812 

這感覺就像是有一點點重複少它。

+0

謝謝先生,工作。不介意我沒有任何聲譽來標記它是正確的,但我已經給它一票。非常感謝 – ShodowOverRide

1

它失去了一些東西

WHERE SenderId = (SELECT UserId FROM Users WHERE ContactNo = 03005114812) 
or ReceiverId = (SELECT UserId FROM Users WHERE ContactNo = 03005114812) 
<missing expression here> IN (SELECT * FROM Messages WHERE SenderId = 1 or ReceiverId = 1) 

UPDATE可能是如id列,如果你擁有了它在messages

WHERE SenderId = (SELECT UserId FROM Users WHERE ContactNo = 03005114812) 
or ReceiverId = (SELECT UserId FROM Users WHERE ContactNo = 03005114812) 
id IN (SELECT id FROM Messages WHERE SenderId = 1 or ReceiverId = 1) 
+0

之間的消息我不知道先生什麼是缺少我嘗試了很多,但invain – ShodowOverRide