2014-04-14 40 views
0

的比方说,我有这样的结构,在我的数据库:我的查询返回大量列

Table Grandparent (Id, Name) 
Table Parent (Id, GrandparentId, Name) 
Table Child (Id, ParentId, Name) 

这是不是一个真正的结构,只是理论......(考虑到一个事实,这种结构可取而代之的是1人桌,其中有parentId,是的,我知道)。当然,我们假设没有性别......只有祖先和后代,就是这样。

好的。所以。假设这些表格按年龄分类。老人们去了祖父母的餐桌。中年人去父母的桌子,孩子们去儿童桌子。

那么我如何查询属于一个祖父母的所有孩子呢?

我尝试这样做:

SELECT * FROM Child 
JOIN Parent ON Child.ParentId = Parent.Id 
JOIN Grandparent ON Parent.Id = Grandparent.GrandParentId 
WHERE Grandparent.GreatGrandParentId = 1; 

其实它的工作原理,但返回大量列(不是行,列)。小恼人,但我可以忍受。我会很高兴任何改进。谢谢。

回答

1

您可能只需要Child表中的列,而不是查询中所有表中的所有列。幸运的是,这很容易实现。只需使用Child.*代替*,导致:

SELECT Child.* FROM Child 
JOIN Parent ON Child.ParentId = Parent.Id 
JOIN Grandparent ON Parent.Id = Grandparent.GreatGrandParentId 
WHERE Grandparent.GreatGrandParentId = 1; 
+0

哇。凉。谢谢。 –

+0

我不应该使用完整的外连接或任何其他连接类型? –

+1

不,您正在使用的内部连接很好,因为您只需要匹配行。也就是说,你不关心'Child'中没有匹配的'Parent'或'Parent'而没有匹配的'祖父母'的东西。 –

1

SELECT *将返回所有表中的所有列。

指定您想要的列 - 例如SELECT child.Name FROM ....

+0

哇。凉。谢谢。 –