2015-03-19 4 views
0

Возможно ли, чтобы я присоединился к двум таблицам ниже?SQL Присоединиться к двум таблицам для сообщений

Моя цель состоит в том, чтобы создать запрос в 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' 

У меня 1 строку в Messages1 и 9 строк в Messages2 (с резьбой ид 9)

Но я все уникальные строки в Messages2, и для каждой строки возвращается Messages1 тело повторяется снова и снова

Я думаю, что мои таблицы спроектированы неправильно, но стоит сначала спросить.

+0

Что такое общее поле между этими двумя таблицами? Как они относятся друг к другу. Это через Thread_ID? Каков ваш вклад и ожидаемый результат? Трудно различить, так как ваш SQL не дает вам то, что вы хотите. – JNevill

ответ

2

То, что вы ищите, является объединением. Это объединит результат двух запросов.

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

Должен бросить инструкцию WHERE в каждом из них для 'Thead_id = 9' – JNevill

+0

@JNevill добавил, не знал, как это сделать, так как в вопросе не ясно, –

+0

Это тот! Спасибо всем за ваши быстрые ответы. – levis84

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

Почему голос? –

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' 
0

Здесь возможны два разных сценария, так как я не уверен на 100%, что именно так.

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

ИЛИ

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

Отредактировано для удаления последние 2 – Matt

1

Этот запрос был также правильным, но вы пропустили условие: Messages1.ThreadId= Messages2.ThreadId

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