首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL、嵌套查询、子查询、相关查询

SQL、嵌套查询、子查询、相关查询
EN

Stack Overflow用户
提问于 2010-11-09 06:21:58
回答 1查看 2.7K关注 0票数 1
代码语言:javascript
复制
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。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2010-11-09 08:46:42

您可以稍微重新组织查询,以避免两个相同的子查询。

代码语言:javascript
复制
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%' )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4128683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档