比五个联接更好的查询并选择*

时间:2016-03-10 20:55:05

标签: python sql sql-server sqlalchemy

我正在寻找如何在SQLAlchemy中执行看似简单的查询。即使我可以在SQL中弄明白,我也希望能够翻译它。下面,我将粘贴我发送到SA电子邮件列表的电子邮件解释问题。本质上,我有五个表,我需要所有列中的所有列和行。问题是某些表为另一个表中的每个记录保存了多个记录,因此总行数很快变得很大。

我正在做的是制作CSV 数据文件。每行都是我的结果中的一行,或者如果我是 只是从产品中选择。必须从属性中进行选择 是我遇到问题的地方。每个产品可以有多个 属性,每个属性值可以分配给多个 产品。加入所有东西(通过使用filter())也给了我一些帮助 许多结果有效地处理。

假设我们的产品ID为001,名称为“widget”,并且有 “images / 001.jpg”的图像。这个产品有重量和颜色,但 这些属性在attributevalues表中。

属性的工作方式如下:attributeassignments有一个 产品ID和属性ID。属性具有属性ID和 属性名称(“颜色”,“大小”等)。 AttributeValues有一个 属性ID和值(“蓝色”,“55”等)。

对于我们的小部件,属性可能有001,001,“大小”; 001,002, “颜色”; 001,003,“重量”。 001是小部件的产品ID。 AttributeAssignment可能有001,001; 001,002; 001,003是 小部件,第二个数字是不同的ID 属性。 AttributeValues可能有001,“1x2x3”; 002,“蓝色”; 003,“55”。

这可能不太合理,但我仍然在我的新工作中学习整个系统,所以我可能不会完美地解释这个设置。但它很有用,关系中的任何问题都是我的解释,而不是数据库本身。

无论如何,在CSV文件中,我想将这三个属性中的每一个都放在一列中: 001,Widget,images / 001.jpg,blue,55,1x2x3

目前,我正在迭代结果。里面的第一行 循环,我检查当前结果的ID并将其与之前的结果进行比较 一。如果它们匹配,我认为我的结果相同,所以我得到了 行中属性的值。如果两个ID不同,我假设 我受够了。我写出了最后一个结果的值,清除了 我用来存储所有值的数组,并获取新的值 不是属性。

我当前的查询做了很多加入,我的结果太大了 尽管如此。第一次迭代工作完美,但后来我 卡住相同的产品ID号。即使我提出查询 限制为100,000,我从未看到任何其他产品ID 一。感觉就像一个无限循环,但事实并非如此。我怎样才能更好地做到这一点?

0 个答案:

没有答案