2010-10-26 25 views
1

我有兩個表如何合併兩個表,一個是1行,另一個是n行?

一個與遊戲 和一個參與者 的遊戲能夠有更多的參與者,這些都是在不同的表的數據庫。

有沒有辦法將這兩個組合成一個查詢?

感謝

+0

當然沒錯,但沒有詳細資料(表/列),我們不能寫吧。 – Fosco 2010-10-26 18:04:12

+0

這三個表中的列是什麼?您的預期輸出是什麼?示例數據可能會與您正在使用的數據庫一起提供幫助... – 2010-10-26 18:04:27

+0

您正在使用哪種版本的SQL(即MySQL,SQL Server)以及表格是如何格式化的? – 2010-10-26 18:04:46

回答

3

可以使用JOIN運營商將它們結合起來。

喜歡的東西

SELECT * 
FROM games g 
     INNER JOIN participants p ON p.gameid = g.gameid 

說明上連接運算符

INNER JOIN - 在所述內 指定的兩個表之間的匹配度的行基於具有匹配的數據的一個或多個 列JOIN語句。 優選地,聯接是基於 參照完整性強制表之間的 關係到 確保數據完整性。 o只是爲上面的基本定義 添加一點點評論,通常INNER JOIN 選項被認爲是應用程序 和/或查詢中所需的最常見的 。儘管在某些環境下這是 的情況,但它確實取決於數據庫 設計,參照完整性和數據 在應用程序中所需的數據。因此, 請花時間瞭解要求的數據 ,然後選擇 正確的加入選項。 ø雖然大多數加入邏輯基於 指定的兩個列之間匹配的值,它是 可以還包括使用邏輯 大於,小於,不平等, 等

LEFT OUTER JOIN - 基於在連接 子句中指定的兩個表中,所有數據都從 左表返回。在右表中, 匹配數據另外還返回 到NULL值,其中在左表中存在 ,但在 右表中存在 。 o另一項要記住的是,左和右外部JOIN邏輯是相反的。 因此,您可以更改 特定連接 語句中的表格順序或將JOIN從左側的 更改爲右側或反之亦然並獲得 相同的結果。

RIGHT OUTER JOIN - 根據連接 子句中指定的兩個表,所有數據都從 右表返回。在左表中, 匹配數據另外還返回 到NULL值,其中 在右表中但不在左 表中存在 。

自 - 加入 - 在這種情況下,在同一個表是爲了同一個表內 匹配數據與兩個不同的 別名指定了兩次 。

CROSS JOIN - 基於連接子句中指定的兩個表,如果 WHERE子句沒有過濾行,則會創建一個 笛卡爾積。 笛卡爾乘積的大小爲 ,其基於左表中 行的數量乘以右表中行的數量 。請使用CROSS JOIN時請注意 。

FULL JOIN - 基於連接子句中指定的兩個表, 所有數據均從 兩個表中返回,而不管數據是否匹配。

+0

正確的答案,但定義有點羅嗦。您可能想要添加簡單的摘要,並提及內部連接可能是最常見的連接類型。 – 2010-10-26 18:30:47

+0

@Stefan,你已經通過你的評論提出了這一點:) – 2010-10-26 21:17:18

1

例如

表遊戲有列(gameName,遊戲ID)
表參與者已列(participantID,participantName,遊戲ID)

的遊戲ID列是 「鏈接」 的2個表之間。你需要一個共同的列,你可以在兩個表之間加入。

 
SELECT gameName, participantName 
FROM Game g 
JOIN Participat p ON g.gameID = p.gameID 

這將返回所有遊戲的數據集以及這些遊戲的參與者。 遊戲列表將是多餘的,除非由於多位參與者參與該遊戲而以某種其他方式構建遊戲。

樣本數據

 
WOW  Bob 
WOW  Jake 
StarCraft2 Neal 
Warcraft3 James 
Warcraft3 Rich 
Diablo  Chris