簡體   English   中英

SQL Server 2012選擇問題

[英]SQL server 2012 select issues

我有一個名為X的數據庫。在此數據庫中,我有兩個表A和B。表A有89行,表b有49行。當我執行兩個獨立的SELECT結果時,ir正確,但是當我混合並嘗試執行一個select時在兩個表中,我都返回了一些神秘的行。

例如:

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)

謝謝!

我認為您實際上正在尋找

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具有相同的數據類型,等等)

您的最后一個查詢正在執行的是CARTESIAN PRODUCT。

表A中的89行乘以表B中的49行=結果為4361行

您試圖按CARTESIAN PRODUCT進行選擇

嘗試這個

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 

您使用的語法等效於進行CROSS JOIN-即它將兩個表中的所有行組合在一起-這將返回2個表之間的所有行組合-在這種情況下為49 * 89。

您能否闡明您期望返回的數據?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM