2014-04-14 77 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

哇。涼。謝謝。 –