首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个表上的多个SQL查询

一个表上的多个SQL查询
EN

Stack Overflow用户
提问于 2012-12-16 22:34:44
回答 1查看 272关注 0票数 0

我用的是灯。在MySql中,我有一个列X、Y和Z的表。我需要从多个集合和子集中选择不同的记录。如果我最初的标准是Y=A,那么我需要能够:

  • 通过选择Y= A的记录来设置B
  • 通过选择X在集合B和Z= 123中的记录来获得集合C
  • 通过选择Y位于集合B且Z= 456的记录来获得集合D
  • 通过选择X位于集合D且Z= 789的记录来获得集合E

这张桌子可能会变大,我不知道从哪里开始。一些可能的办法是:

  1. 有多个单独的查询。在这种情况下,如何将结果集从一个查询缓存为另一个查询的输入?梅卡奇?
  2. 使用嵌套子查询。但是内部查询的结果纯粹是为了限制外部查询,不是吗?我怎样才能让他们出现在结果中?
  3. 使用联合。但是如何将一个查询的结果存储为另一个查询的输入呢?
  4. 多次将表连接到它自己。这将产生一个笛卡尔结果,其中外层行被重复多次。这将映射到一个多维PHP数组,这个数组应该是可管理的。但是表演呢?

我倾向于第四种选择,但不是百分之百肯定。我在重新发明方向盘吗?

非常感谢..。

EN

回答 1

Stack Overflow用户

发布于 2012-12-17 01:29:38

我不明白你的目标,因为你还没有定义对X的限制,但是从你的描述来看,我相信集合E是空的。我这么说是因为集合D已经包含Z为456的行。因此,当您在该结果集上运行另一个查询以为Z为789的条件生成E时,您将不会得到任何行,因为D中的所有行都是456。

现在谈一谈个人意见:

  1. 尽可能避免笛卡尔产品
  2. 如果需要,可以对表进行去denormalize,以提高查询效率
  3. 生成尽可能最小的结果集以满足您的需求的查询。
  4. 如果可能的话,使用子查询减少结果集的大小。
  5. 信任查询优化器,以便尽可能避免子查询
  6. 使SQL尽可能地执行这项工作,因为它具有以最优方式计算数据的能力和资源。

为了突出上面的第4项,我想提到,在D的示例中,您可以编写以下查询,而不需要子查询或任何其他临时存储:

代码语言:javascript
运行
复制
SELECT * FROM MyTable WHERE Y = A AND Z = 456

现在,也许我可以通过猜测你想要的东西来解决你的困境:

代码语言:javascript
运行
复制
SELECT * FROM MyTable WHERE Y = A AND Z IN (123, 456, 789)

或者:

代码语言:javascript
运行
复制
SELECT * FROM MyTable WHERE Y = A AND (Z = 123 OR Z = 456 OR Z = 789)

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13906154

复制
相关文章

相似问题

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