У меня есть 3 таблицы, с которыми я работаю.Сложный SQL-запрос, возвращающий нежелательные результаты
TableA, TableB, TableC
Таблица A содержит информацию для клиента, каждая строка содержит всю информацию для одного конкретного человека.
Таблица В содержит информацию о сообщении, которое создал человек в TableA.
ID DistID Subject Message CreatedDate StatusID SentTotal
57 3 MonList MonList 2012-03-19 16:21:36.117 2 4
В таблицеС содержится список людей, имеющих доступ к сообщению в TableB.
ID MessageID DistID StatusID Important OriginalMessagelID
25111 58 516 1 0 NULL
25112 58 519 1 0 NULL
25114 58 374 1 0 NULL
25115 58 5545 1 0 NULL
25116 58 23435 1 0 NULL
TableC MessageID будет таким же, как идентификатор TableB.
TableB и TableC DistID будет ссылаться на DistID в таблице A (таблица A включает много информации для копирования даже для одной строки, это соотношение 1 к 1, 1 строка для одного клиента).
Мне нужно создать запрос, который связывает эти три таблицы вместе. Вот то, что я до сих пор:
SELECT *
FROM Distributor d
INNER JOIN Messages ms
ON ms.DistID = d.DistID
INNER JOIN Message m
ON m.DistID = d.DistID
WHERE ((d.DCLoginDate <= (GETDATE() - 3) OR d.DCLoginDate IS NULL) AND (CONVERT(VARCHAR(8), m.CreatedDate, 1)) = (CONVERT(VARCHAR(8), GETDATE(), 1)))
Теперь TableB может иметь несколько сообщений, созданных одним и тем же клиентом, поэтому их DistID могут присутствовать в этой таблице более чем 1 раз.
TableC аналогичным образом, DistID может присутствовать в этой таблице более одного раза.
Я начал делать отдельные запросы, которые работали:
SELECT *
FROM Distributor
WHERE (DCLoginDate <= (GETDATE() - 3) OR DCLoginDate IS NULL)
SELECT *
FROM Message m
INNER JOIN Messages ms
ON ms.MessageID = m.ID
WHERE ((CONVERT(VARCHAR(8), CreatedDate, 1)) = (CONVERT(VARCHAR(8), GETDATE(), 1)))
выше работа правильно, когда я попытался объединить их в одно заявление, что начала возвращать 0 результаты, когда я должен был возвратить два (из моих живых данных , а не данные, приведенные выше).
Кто-нибудь понимает, как заставить это работать эффективно?
Спасибо, что работали так, как будто предполагалось вернуть 2 результата. Иногда самые трудные вещи - самые простые. Работало. –
@JamesWilson Добро пожаловать, рад, что помог! –