首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接4个表,其中一个表是无关的

问连接4个表,其中一个表是无关的
EN

Database Administration用户
提问于 2016-01-14 16:10:17
回答 1查看 704关注 0票数 1

我有四张桌子如下所示。

我想以以下方式找到一个以25条记录为限的批发结果集:

  • 基于条件的Table1用户
  • 而这些用户不应该在Table2 非受限用户中。
  • 将这些记录连接到Table3 on Table1.Group_id = Table3.Group_MEMBER_ID,其中Table3.GroupName = 'someValue‘
  • 在Table1.UserName = Table4.UserName上加入Table1和Table4

目前正在使用两个查询和使用UNION。就像这样:

代码语言:javascript
复制
      ( SELECT  Table_4.DeviceName
            from  Table1
            left join  Table2 on Table1.UserName = Table2.UserName
            inner join  Table4 on Table1.UserName = Table4.UserName
            where  Table1.some_column = 'someValue'
              and  Table2.UserName = null
            limit  25
      )
UNION
      ( SELECT  Table4.DeviceName
            from  Table1
            inner join  on Table1.Group_ID = Table3.GROUP_MEMBER_ID
            inner join  Table4 Table1.UserName = Table4.UserName
            where  Table3.GroupName='someValue'
              and  Table1.some_column = 'someValue'
            limit  25
      ); 

重点是,我不能把批发结果限制在25条记录之内。我应该对每个查询使用限制。是否有方法将其合并成一个查询,以便将批发量结果集限制为25?

注意: PL/SQL和CTE在我的开发系统中不可用,因此无法使用。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2016-01-14 22:14:22

问题1:如果没有LIMIT来指示哪一个25,那么ORDER BY就有点毫无意义了。

问题2:不要说x=null,它不会像你想的那样做。相反,请执行x IS NULL。

问题3:你真的想要一个“交叉连接”吗?也就是说,没有ON子句的联接,从而获得两个表的所有组合?

问题4:嗯,我没有检查你剩下的东西。

回到你的问题..。模式是

代码语言:javascript
复制
( SELECT ... ORDER BY ... LIMIT 25 )
UNION ALL  -- or DISTINCT, depending on your understanding of the data
( SELECT ... ORDER BY ... LIMIT 25 )
ORDER BY ... -- Yes, again
LIMIT 25;

如果您需要一个偏移量,例如100,那么:

代码语言:javascript
复制
( ... LIMIT 125 )
UNION ...
( ... LIMIT 125 )
ORDER BY ...
LIMIT 100, 25;
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/126257

复制
相关文章

相似问题

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