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所以,我有一个表,让我们称它为事件,它链接到未注册和已注册的表。我希望在此注册表中的内容找到的任何事件中选择所有未注册和已注册的行。
未注册和已注册的-tables都有几个(或没有)具有相同事件ID的条目。这只是演示内容和名称,但问题是真实存在的。
您看到了问题所在,这里我需要查询ID范围两次,如何在一次查询中实现这一点,并在两个联合语句中使用结果?例如,执行输出查询的最好和最有效的方法是什么?
它是MS SQL Server。
谢谢!
发布于 2010-11-09 08:46:42
您可以稍微重新组织查询,以避免两个相同的子查询。
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%' )https://stackoverflow.com/questions/4128683
复制相似问题