2014-03-04 160 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 –