2013-10-04 23 views
0

什麼是從一個表中選擇數據並將其匹配到另一個數據的最佳方式,然後返回那些兩者一起的多個表選擇?的MySQL從那裏兩個項目匹配

我有一堆在它的信息的表,它是相關國家的名字。 我需要從另一個表中獲得與國家/地區名稱匹配的國家/地區代碼

是否最好使用說一個mysql JOIN函數來將數據鏈接在一起或使用類似於foreach()的方法來創建單獨的請求得到每件物品。

我有一種感覺,JOIN(或類似的東西)將是最好的解決辦法,但是我真的不知道如何構造記MySQL查詢軸承我需要的數據從兩個表返回。

$sql = "SELECT DISTINCT r.country,c.* FROM resorts LEFT JOIN (SELECT * FROM Country WHERE r.country = c.countryName)"; 

表1

  • 國家

表2

  • ID
  • 國家名稱
  • COUNTRYCODE
+0

可以告訴你,你寫的查詢結束了嗎? – aaron

+0

你能分享樣本數據嗎? – AgRizzo

+0

我已將這些添加到問題 – user1711576

回答

1
SELECT r.country,c.id, c.CountryName, c.CountryCode 
FROM resorts as r 
LEFT JOIN Country AS c 
    ON r.country = c.countryName 

還是擺脫返回所有有一個國家的度假記錄(與返回所有度假記錄的LEFT相反,無論是否存在國家記錄)

+1

你有幾個問題與您的查詢。首先,您使用表別名而不定義它們(r和c)。其次,你過於複雜的左加入 – AgRizzo

2

這是在MySQL一個非常簡單的概念;最簡單的一個聯接:

SELECT columns, countryCode 
FROM t1 
JOIN t2 ON (t1.countryName = t2.countryName) 

編輯:你在你的問題中新增了你真正的表名/列,所以我會重寫這些查詢:

SELECT id, countryName, countryCode 
FROM Country 
JOIN resorts ON (country = countryName) 
+0

這是如何向其他表提出請求的? – user1711576

+0

@ user1711576您將不得不深入MySQL源代碼以瞭解我的猜測。也許在看這將幫助:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html –

+0

好吧,我現在看到。我以爲你必須運行一個選擇到另一個表而不是msSQL在加入 – user1711576

0

SQL中的Join確實從兩個表中返回數據, 當您連接兩個表時,SQL解析器/引擎會在table1的每一行上生成一個「笛卡爾乘積」並循環,並檢查第二個表table2中的每一行的連接條件,並從兩個表中返回所選列。 因此,例如在當您加入表1(其中包含2行)與表2(其中包含3行)你實際上的2 * 3檢查/環路這是6