2017-08-04 63 views
-5
SELECT column_1 FROM table_1,table_2; 

當我在我的數據庫上運行這個時,它返回了大量的重複column_1值的行。我無法理解爲什麼我得到了這些結果。請解釋這個查詢的作用。這個sql查詢是做什麼的? SELECT column_1 FROM table_1,table_2;

+0

從table1表2中選擇column_1,沒有任何連接條件。你需要添加一個條件,如'where table1.id = table2.id' – RealCheeseLord

+0

也許只需要很少的努力。沒有樣本數據,沒有預期的結果。任意dbms標記等。 – jarlh

+0

今天提示:切換到現代的,明確的'JOIN'語法。易於編寫(沒有錯誤),更易於閱讀(和維護),並且在需要時更容易轉換爲外部聯接。 – jarlh

回答

2

更通俗地說一個cross product,這意味着在表A中的每個記錄,你從表B中的每個記錄(所有可能的組合)。

表A與3條記錄和表B具有3個記錄給出了結果9個總記錄:

TableA-1/B-1 
TableA-1/B-2 
TableA-1/B-3 
TableA-2/B-1 
TableA-2/B-2 
TableA-2/B-3 
TableA-3/B-1 
TableA-3/B-2 
TableA-3/B-3 

常用作笛卡爾查詢的基礎(它本身以產生,也就是說,一個列表的裝置根據週期計劃未來日期:給我所有可能的結果在接下來的6個月,然後限制設置爲那些因素我一週中的一天)的交叉連接兩個表

4

它可以讓你從表1和表2

+0

這會有什麼用。你能給個例子嗎? – serbia99

+0

@ serbia99我不知道。我從來不需要它 – Jens

+0

看Dymeng的答案。 – Learning

0

這是「有效」的方式相匹配;但它不是首選的方式。 Cross Join會更清晰。一個on條件將有助於限制結果,

+0

所以它只是另一種做CROSS JOIN的方式。謝謝。 – serbia99

0

想象一下,我有3個朋友,名爲Jhon,Ana,Nick;那麼我在另一張桌子上有兩件T恤是紅色和黃色的,我想知道女巫是從哪裏來的。

所以在查詢中表A:朋友和tableB的:T恤返回:

1|JHON | t-shirt_YELLOW 
2|JHON | t-shirt_RED 
3|ANA | t-shirt_YELLOW 
4|ANA | t-shirt_RED 
5|NICK | t-shirt_YELLOW 
6|NICK | t-shirt_RED 

正如你看到的這個連接有朋友和T恤之間沒有關係的邏輯,所以通過評估所有更多鈔票組合產生什麼你呼叫重複。