Reputation: 167
I have this sql which doesnt work as both unions have different expressions, how can this be done? thanks (mssql stored procedure) have no idea where to go from here
SELECT
*
FROM
(SELECT
ROW_NUMBER()
OVER
(ORDER BY T.TopicCreationDate desc)
AS RowNumber
,T.TopicId, T.TopicTitle, T.TopicShortName, T.TopicDescription, T.TopicCreationDate, T.TopicViews, T.TopicReplies, T.UserId, T.TopicTags, T.TopicIsClose,
T.TopicOrder, T.LastMessageId, T.UserName, M.MessageCreationDate, T.ReadAccessGroupId, T.PostAccessGroupId, U.UserGroupId, U.UserPhoto, T.UserFullName
,M.UserId AS MessageUserId
,MU.UserName AS MessageUserName
FROM TopicsComplete AS T LEFT OUTER JOIN
Messages AS M ON M.TopicId = T.TopicId AND M.MessageId = T.LastMessageId AND M.Active = 1 INNER JOIN
Users AS U ON U.UserId = T.UserId
LEFT JOIN Users MU ON MU.UserId = M.UserId
WHERE EXISTS
( SELECT *
FROM TopicsComplete
LEFT OUTER JOIN
Messages AS M ON M.TopicId = T.TopicId AND M.MessageId = T.LastMessageId AND M.Active = 1 INNER JOIN
Users AS U ON U.UserId = T.UserId LEFT OUTER JOIN
Users AS MU ON MU.UserId = M.UserId
WHERE (T.UserId = @id)
UNION
SELECT *
FROM TopicsComplete
LEFT OUTER JOIN
Messages AS M ON M.TopicId = T.TopicId AND M.MessageId = T.LastMessageId AND M.Active = 1 INNER JOIN
topicfollows AS TF ON T.TopicId = TF.topicid INNER JOIN
Users AS U ON U.UserId = T.UserId LEFT JOIN
Users MU ON MU.UserId = M.UserId
WHERE (TF.userid = @id)
)
) T
Upvotes: 0
Views: 71
Reputation: 43023
All the columns returned by both sides of the union have to match (the number of columns and their data types, not the actual names/aliases).
First of all, don't specify the returned columns with SELECT *
. It's a bad habit that leads to problems, e.g. when you add a new column to one of the tables.
Secondly, if one part of the union doesn't have enough columns, specify some constants to provide values for those columns (adding an alias for clarity), e.g.
SELECT 0 AS RowNumber, T.TopicId, T.TopicTitle, T.TopicShortName, T.TopicDescription, T.TopicCreationDate, T.TopicViews, T.TopicReplies, T.UserId, T.TopicTags, T.TopicIsClose,
T.TopicOrder, T.LastMessageId, T.UserName, M.MessageCreationDate, T.ReadAccessGroupId, T.PostAccessGroupId, U.UserGroupId, U.UserPhoto, T.UserFullName
Upvotes: 1