2016-07-19 75 views
0

我有一個關於查詢在MySQL中的問題。我做了2個表,表1和表2.在表1中有2行數據,它在表2中有2行數據,每個表有3個字段。在這種情況下,我想使視圖的查詢:這是一個錯誤?或者錯誤?或者一個錯誤的查詢?

create view point as select table2.field2 from table1, table2; 

我認爲它會顯示在表2數據的地方有兩個數據。但結果是顯示4行數據,其中每2行是相同的數據。 當我試圖刪除表1中的1行,它的意思是刪除1個數據,我試着輸入上面的查詢。結果是正確的,它在table2中顯示2行數據。爲什麼它在table1中有1行數據時正確,當table1有2行數據時沒有。請如何解決它?或者我的錯誤查詢。

+0

您的'from'或'Where'子句中沒有任何連接條件。基本上,你所執行的是一個笛卡爾連接,在你的'from'子句的每個其他表中的每一行都會顯示一行。基本上你看到的是2行* 1行= 2行。 2行* 2行= 4行。您需要爲表添加連接條件,例如將主鍵鏈接到外鍵。 – Rook

+0

以前感謝。現在我知道你什麼時候像上面的例子那樣顯示計數。但實際上,我的2個表沒有任何連接條件。我只想在table2和table1中取一個值,並在新的視圖中顯示新的視圖。現在我記得,使用視圖必須有2個或更多表之間的關係。感謝Rook。 –

回答

0

您在這兩個表格之間使用implicit cross join

比方說table1m行和table2n行。

然後

SELECT * FROM table1,table2將返回m*n行。

上述查詢等效於此:

SELECT * FROM table1 CROSS JOIN table2

如果您想要獲取table1table2的所有行,請記住我不想重複,那麼您需要使用UNION

所以,你可能會尋找這個查詢:

CREATE VIEW point AS 
SELECT table2.field2 from table2 
UNION 
SELECT table1.field2 from table1 

注:

如果你想允許你設置那麼使用UNION ALL代替UNION像下面的最終結果重複值:

CREATE VIEW point AS 
SELECT table2.field2 from table2 
UNION ALL 
SELECT table1.field2 from table1 
+0

我正在嘗試,但聯合合併2選擇方法是一種選擇方法,並忽略多個記錄數據。 –

+0

是'UNION'實際上合併了從這兩個單獨查詢中刪除重複結果的結果。以防萬一,如果你想允許重複,然後使用'聯合所有'而不是。 – 1000111

相關問題