SELECT T.[NAME] FROM (
SELECT Unregistered.[NAME]
FROM Unregistered
LEFT JOIN [Event] ON Event.ID = Unregistered.EventID
WHERE EventID IN (
SELECT EventID
FROM Registered WHERE [NAME] Like '%blabla%' )
UNION ALL
SELECT Registered.[NAME]
FROM Registered
LEFT JOIN [Event] ON Event.ID = Registered.EventID
WHERE EventID IN (
SELECT EventID
FROM Registered WHERE [NAME] Like '%blabla%' )
) AS T
所以,我有一个表,让我们称之为链接到未注册和已注册表的事件。我想在此注册表中的内容中找到任何事件中的所有未注册和已注册的行。
Unregistered和Registered -tables都有几个(或没有)具有相同事件ID的条目。这只是演示内容和名称,但问题是真实的。
你看到了问题,这里我需要两次查询ID范围,如何在一个查询中进行此操作并在两个union语句中使用结果?至于什么是执行输出查询的最佳和最有效的方法?
这是MS SQL Server。
谢谢!
答案 0 :(得分:2)
您可以稍微重新组织查询以避免两个相同的子查询。
SELECT t.[NAME]
FROM
(
SELECT [EventID], [Unregistered].[NAME]
FROM [Unregistered]
UNION ALL
SELECT [EventID], [Registered].[NAME]
FROM [Registered]
) t
LEFT OUTER JOIN [Event] ON t.[EventID] = [Event].[ID]
WHERE t.[EventID] IN ( SELECT [EventID] FROM [Registered] WHERE [NAME] Like '%blabla%' )