SQL在两个表上加入消息

时间:2015-03-19 15:39:56

标签: sql sql-server vb.net join

我可以加入下面的两个表吗?

我的目标是在ASP.NET中创建一个查询,列出一组数据中消息 Messages2 中的所有消息。

Messages1:

Messages1_ID,
Thread_ID,  
DateCreated,
Title,     
Body

Messages2

Thread_ID,
Messages2_ID,
DateSent,
DateMsg2Downloaded,
Msg2Subject,
Body

我试过这个问题:

SELECT Messages1.body, Messages2.Body
from Messages1, Messages2
where Messages1 = '9'

Messages1 中有1行, Messages2 中有9行(线程ID为9)

但我得到了 Messages2 中的所有唯一行,并且对于返回的每一行 Messages1 正反复重复

我认为我的桌子设计不正确,但值得先问一下。

5 个答案:

答案 0 :(得分:2)

你要找的是一个工会。这将结合两个查询的结果。

SELECT Messages1.body
from Messages1
where Messages1.Thread_ID = '9'
union
SELECT Messages2.Body
from Messages2
where Messages2.Thread_ID = '9'

答案 1 :(得分:1)

SELECT Messages1.body, Messages2.Body
from Messages1 
inner join  Messages2 ON Messages1.Thread_ID  = Messages2.Thread_ID
where Messages1.Thread_ID = '9'

答案 2 :(得分:1)

根据您发布的代码判断,您想使用inner join

要使用连接,您需要在两个表之间使用公共字段。在我的情况下,我将假设它是threadID。

SELECT a.body, b.Body
from Messages1 a
inner join Messages2 b
  on a.Thread_ID = b.Thread_ID
where a.Thread_ID = '9'

答案 3 :(得分:1)

此查询也是正确的,但您错过了条件:Messages1.ThreadId= Messages2.ThreadId

SELECT Messages1.body, Messages2.Body
from Messages1, Messages2
where Messages1.ThreadId= Messages2.ThreadId and Messages1 = '9'

答案 4 :(得分:0)

这里有两个不同的场景,因为我并不是100%确定你的确切追求。

SELECT * FROM
(SELECT m1.body
FROM Messages1 m1
UNION ALL
SELECT m2.Body
FROM Messages2 m2
)
WHERE ThreadId = '9'

OR

SELECT m1.body, m2.Body
FROM Messages1 m1
INNER JOIN Messages2 m2 ON m1.ThreadId = m2.ThreadId
WHERE m1.ThreadId = '9'