【发布时间】:2010-10-12 15:03:43
【问题描述】:
错误很简单。
有 3 个表,
让我们将它们命名为 A、B、C - 它们都有 7 行。
A有以下数据
1 2 3 4 5 6 7
ID = 1
B有以下数据
8 9 10 11 12 13 14
ID = 1
C有如下数据
15 16 17 18 19 20 21
ID = 1
现在我将它们选择为:从 A,B,C 中选择 A.col1,B.col1,C.col1 其中 A.ID= B.ID 和 C.ID= A.ID 和 B.ID= C .ID。
所以输出是 343。
现在我想要的输出只是从 1 到 21 的数字,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
请帮我摆脱这个麻烦,并建议我进行微调查询。
【问题讨论】:
-
与其混淆您的示例,不如调试更多“真实世界”示例更容易。就目前而言,我很困惑。
-
因为您在 FROM 子句中使用了此构造:“from A,B,C”您将在结果中获得 7x7x7 行 (343),因为该构造创建了笛卡尔连接。请改用 INNER JOIN(有关详细信息,请参阅 devshed.com/c/a/MySQL/Understanding-SQL-Joins。
-
您的查询产生了叉积,因为连接子句不明确。对于 A 中的每一行,B 中有 7 个匹配行,对于 B 中的每一行,C 中有 7 个匹配行。正如 Leslie 所指出的,7x7x7 是 343,这是所写查询的正确行数。跨度>