- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
将问题简化为基础,我们有三个表组件、程序和用户,它们以多对多关系关联两个中间表 program_components 和 user_programs。
simplified table structure
users
- id (primary key)
- (...)
user_programs
- user_id (foreign key to users id)
- program_id (foreign key to programs id)
programs
- id (primary key)
- (...)
program_components
- program_id (foreign key to programs id)
- component_id (foreign key to components id)
components
- id (primary key)
- (...)
我们正在将用户对程序组件的权限集成到我们的云管理系统中。我偶然发现了一个接一个连接的查询,想知道是否需要中间表。
SELECT users.id, components.id FROM components
JOIN program_components ON c.id = program_components.component_id
JOIN programs ON program_components.program_id = programs.id
JOIN user_programs ON programs.id = user_programs.program_id
JOIN users ON user_programs.user_id = users.id
WHERE (...)
中间连接是否必要,或者我们可以将其简化为
SELECT users.id, components.id FROM components
JOIN program_components ON c.id = program_components.component_id
JOIN user_programs ON program_components.programId = user_programs.programId
JOIN users ON user_programs.user_id = users.id
WHERE (...)
根据我的测试,它们都产生了相同的数据集,这是我完全期望的。问题更多是关于 MySQL 期望得到什么,以及从数据库的角度来看哪个查询有意义。
为了可读性,我建议第一个版本带有额外的 JOIN,因为它促进了跨多个表的连接意图,遍历通用的 programs 表。然而,我经常被告知太多的连接往往是错误的处理方式。[1]
文档中是否有针对此类查询的任何建议?
[1] 我们正在重构以包含一个适当的 user_components 表,这将免除我们的这些查询,并为我们提供更多的灵 active ,但这超出了问题的范围。
最佳答案
由于您只需要用户和组件表中的 ID,因此没有理由加入程序表。实际上不建议这样做,因为它可能会导致明显的性能下降。
在编写 SQL 查询时,检查检查了多少行总是有用的。通过加入程序表,您必须检查它的 ID 行,即使您不需要它的任何信息也是如此。
有关更多信息,您可能有兴趣阅读 this ,其中解释了一些提高查询性能的方法
关于mysql - 多对多到多对多 : is there a need for the middle join?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54570331/
我在一个 anchor 内有一个内联 block 元素(跨度),它的高度为 40 像素。我尝试将 span 垂直居中,但它的位置更可能靠近底部。它不在中间。我怎样才能真正垂直居中该跨度? JSFidd
在我的 HTML 中,我有一个 div,它有三个 div 作为子元素。我想让第二个和第三个 child (分别是文本和按钮)居中对齐。 Some Text
当使用浏览器网络检查器时,我遇到了 CSS 属性 vertical-align 的两个不同的非标准属性。 -webkit-baseline-middle 仅在 Chrome 中可用,而 -moz-mi
下面的方法不会编译: public K test(K a, K b) { return a.test(); //a.test() returns Middle } 如果我们将K设置为
我有三列,中间列有一个按钮,我想在中间垂直对齐。 Cli
试图解决要求的家庭作业问题:更改姓名,以便姓在前。示例:“Mary Jane Lee”将返回“Lee, Mary Jane”。如果名称中没有空格,则原样返回。 经过一些研究,我似乎可以使用 Split
我需要使用 IE11 在 SVG 中完美地居中文本元素。 预期结果(所有 Evergreen 浏览器): IE11 结果: //SVG 代码: 1 Codepen 最佳答案
我有一个结构数组,这些结构基本上是形成一条边的两个点。由于性能,我使用结构。 现在我有对象 A 保存边缘和这个对象中的一个方法来告诉另一个对象 B 关于这个边缘数组中的连续边缘列表。 边缘: e0 e
我试图将两个链接垂直对齐到 Logo 的两边中间,但它似乎不起作用。此外,我想让它成为一个响应式导航,两个链接都以 Accordion 下拉方式显示在 Logo 下方。我一直在到处寻找解决方案,但找不
据我所知,vertical-align: middle; CSS 属性仅适用于 display 选项设置为 的元素表格单元格。 那么为什么 vertical-align 在 button 元素上被接受
我有两个值 v1 和 v2,分别是 T1 和 T2 类型,sizeof(T1)>sizeof(T2)。两种类型都是普通旧数据。现在,我想用 v2 的字节替换 v1 的第 k、k+1、... k+siz
直播:http://jsfiddle.net/8hAv3/ #main { width: 100px; height: 100px; background-color: red
jsFiddle:http://jsfiddle.net/2CRZP/ 我想使用 vertical-align:middle 或其他东西 (CSS) 将灰色框放在屏幕中间。
表格和表格单元格不起作用。我将表格的高度设置为 100% 并将表格单元格设置为自动。然后我尝试将 table-cell 设置为 vertical-align middle 100% 宽度但不起作用。我
我正在尝试编写一个函数来 找到图片的高度 执行计算(200px - 图片高度) 为每个不同的缩略图添加一个 css 样式(.imgk{margin-top:"calculated value";})。
我想将 img 元素放在 div.partners-slider 的中间。这是一个响应式 slider ,我无法设置固定高度。有什么建议吗? jsfiddle HTML
我试图将此文本区域的标签对齐到文本框的中间,但它不起作用。输出看起来像这样: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx
在下面的测试用例中,替代文本水平居中,但它固定在框的顶部。我如何在中间获取它? 最佳答案 表格的一个优点是它们提供跨浏览器的垂直居中。 DIV 没有。
我正在为本质上是一个 n 层协作应用程序(不是企业级,只是一个具有显着增长潜力的小型项目)开发一种新架构,我已经在尝试训练自己使用 IoC,并且在某种程度上, TDD,而且我想知道,一般来说,手动编写
我有一个想法,但不知道是否可以这样做: 是否可以编写一个 USB 摄像头驱动程序,该驱动程序可以将视频源多路复用到任何需要它的软件? 一种“中间人”司机:) 最佳答案 如果需要 Linux 驱动程序,
我是一名优秀的程序员,十分优秀!