我正在简化实际案例以便更快地获得要点,就像抬头看起来似乎无意义一样。跨多个表格的复杂查询
我有一张名为Candy_Central的表格。 Candy_Central拥有我糖果的所有ID,每磅的价格以及所有Candy记录中的其他重要信息。它也有一个名为Candy_Type的字段。 Candy_Type的价值可能是巧克力,坚硬,胶质或液体。
我有另一套表用于糖果信息,但他们的使用是由糖果类型决定的。例如,如果我想了解我的主要巧克力棒的其他信息,我需要去Chocolate_Standard以获取其余的信息。如果我在外面看糖胶蠕虫,我需要去Gummy_Standard。原因是一组信息的字段与另一组信息的字段完全不同。
我还有一层信息,颜色。我的糖果是蓝色的,我的糖果是黑色的,而且我有两种颜色的糖果。我目前存储这些信息的方式是,我有一个表格,其中的字段为Candy_Id
和Color
。为了找到所有的颜色,我通常只需在这张桌子上使用color_id字段来查询我感兴趣的糖果。但是SQL当然是要找到所有的结果。所以如果我想找到所有的粘连信息,我想要做某种连接或联合。我不是非常熟悉这种类型的查询,所以我不知道如何获得我想要的结果表,这基本上会[对于psuedo查询] [来自Candy_Main的项目作为CM ...项目从Gummy as g ...颜色项目作为c ...其中cm.candy_id = g.candy_id和cm.candy_id = c.candy_id)。如果软糖没有颜色,我只想要null。我很满意为每个candy_id获取了多条线,但我希望尽可能有限,这样后处理(将多条糖果线变成我的应用程序中的一个对象)花费尽可能少的时间。
表:
Candy_Main
candy_id (primary key, auto increment, not null, etc)
candy_name (varchar)
candy_inventor_id (a primary key from some other table, but this is needed for the where clause.
candy_type (varchar)
Gummy_Standard
gummy_id (primary, auto)
candy_id (should match to candy_main)
softness (varchar)
outer_coating_type (varchar)
animal_likeness (varchar)
Gummy_Colors
gummy_color_id (primary, auto)
gummy_id (int)
candy_id (int)
color (varchar(64))
Gummy_Ingredients
gummy_ingredient_id (primary, auto)
gummy_id (int)
candy_id (int)
ingredient (varchar(64))
现在,我要为所有条目where candy_inventor_id = 5 AND candy_type = 'gummy'
做一个查询。在查询结束时,我想要candy_name, candy_type, softness, outer_coating_type, animal_likeness, colors, and ingredients
。
颜色&成分是在这个查询中不是1对1的唯一对象,所以我希望那里只有尽可能多的条目,因为有颜色和成分。感谢您的帮助,如果这是可能的。我有一种感觉,即将颜色或成分限制在这个范围内会很容易,但这对于两者来说都太难了。
我结束了只有一行,其中所有的信息已被平摊。这就是说,GROUP_CONCAT看起来像是一个有希望进一步调查的方向。难道是GROUP_BY的缺席? –
立即尝试@Brian。 – diEcho
想通了。我输入了ORDER BY。我的错。谢谢,这会做。我在GROUP CONCAT列表中获得了一些复制,可能是因为使用了多个表格,我想将其除掉,但可以等待。非常感谢! –