2014-03-04 157 views
0

我有一个名为X的数据库。在这个数据库中有两个表A和B.表A有89行,表b有49.当我执行两个独立的SELECT结果时,混合并尝试为两个表格执行一个选择我收回一些神秘的行数。SQL server 2012选择问题

例如:

SELECT * FROM A (89 rows, that's correct) 
SELECT * FROM B (49 rows, that's correct) 

SELECT * FROM A, B (4361 rows, and information there is repeating and duplicating) 

谢谢!

+0

这与在任何情况下加入JOINING'FROM A JOIN B ON 1 = 1'无关。 –

+0

请澄清你正在努力实现的目标 –

+0

在一张表中,我在其他pc更新中安装了pc软件。我想从两个表中获取信息。表格没有相同的行数。 – user22401

回答

0

您最近的查询正在执行的是CARTESIAN产品。从表A

89行数乘以从表B 49行= 4361行的结果

+0

是的,只需检查。嗯,有没有一个选项可以得到正确的行数? – user22401

+0

这取决于你想要从这两个表..plz指定 –

+0

在一个表中,我已经安装软件在PC,在其他电脑更新。我想从两个表中获取信息。 – user22401

1

我想你实际上是寻找

SELECT * FROM A 
UNION ALL 
SELECT * FROM B 

我想你想这两个表中的结果一个结果集,并且这样做的方式是在SELECT语句之间使用UNION。

请注意,只有A和B中的列在数据类型和表格定义方面相同时,这才会起作用。

表A中列#1的数据类型必须与表B中列#1的数据类型相同,依此类推。(仅当您使用SELECT *时才有效)

您还可以按顺序指定列,以便数据类型匹配。

SELECT col1, col3, col2 from A 
UNION ALL 
SELECT col2, col1, col3 from B 

(如果从A COL1具有相同的数据类型的B等COL2)

+0

嗯,我试过了,但还有另外一个问题。我得到的表达式数量相同的错误,但表A有89行,B有49.而当我peform select时,我想从两个表中得到138行信息。 – user22401

+0

@ user22401确保在使用UNION语句时确保每个SELECT具有相同数量的列和正确类型。见Radu上面的第二个答案。 –

0

您正在试图通过笛卡尔乘积来选择。

试试这个

SELECT * FROM A 
UNION ALL  // It will select all 89 + 49 records from both table 
SELECT * FROM B 

或者:

SELECT * FROM A 
UNION   // It will select all records from both table without duplicate 
SELECT * FROM B 
+0

获取有关表达式数量相等的错误 – user22401

0

您使用的语法是做CROSS JOIN相当于 - 即它结合两个表中的所有行 - 这将返回所有组合你的2张桌子之间的行数 - 在这种情况下是49 * 89.

你能澄清你期望返回的数据吗?

+0

在一张表中,我在其他PC更新中安装了pc中的软件。我正在创建它以供reportin服务中的进一步使用。现在我坚持下去。 – user22401

+0

很难说没有更多的细节,但我原以为你需要使用基于一个或多个关键列的两个表之间的INNER JOIN –