2010-11-15 91 views
1

當每個表只有340行時,以下查詢返回> 7000行。SQL內部聯接返回的方式多於預期的行

SELECT Config.Spec, TempTable.Spec FROM Confg INNER JOIN TempTable on Config.Spec = TempTable.Spec 

爲什麼會發生這種情況?如果INNER JOIN只在兩個表中存在匹配的情況下才返回一行,那麼爲什麼它會爲匹配返回多行。

回答

6

如果有多個行與ConfgTempTable相同Spec值相同Spec值,那麼你會得到重複的行,反之亦然。

+0

這是答案,但我希望我明白SQL爲什麼會這樣。如果我也SELECT Config.uid我仍然得到多行 - 我想我真正想要的是一個SELECT DISTINCT LEFT JOIN。無論如何感謝您的答案。 – plntxt 2010-11-15 15:37:17

+0

@Jim:它的行爲方式是因爲它是基於集合的語言,這被證明是最有用的行爲。如果這種方式不起作用,你怎麼能加入「類別」和「產品」表來查找類別中的所有產品?你會建議在比賽中只返回一行嗎? – RedFilter 2010-11-15 15:43:08

+0

由於我不是計算機科學家,我無法提出任何建議:)。感謝您的洞察力,但現在對我來說很有意義。 – plntxt 2010-11-15 15:50:27

1

Spec字段值是否不唯一?這可以解釋爲什麼查詢返回太多結果;與重複你得到一個有效的交叉產品的人。