2014-03-27 69 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