2014-07-07 57 views
3

我有2個表,現在和他們如下所示:如何根據多條記錄選擇多列與MySQL?

points表如下所示:

id country  points 
1 4   1 
2 7   5 
3 8   4 

sample表如下所示:

id iso  pts 
1 UK   100 
2 US   300 
3 AU   700 
4 BO   1200 
5 BA   1500 
6 BR   2000 
7 HR   5000 
8 TD   10000 
9 CA   15000 

什麼我基本上想要的是從points表中選擇所有數據,其中points.countrypoints.points對應於sample.isosample.pts

所以我想達到的效果是:

id country  points 
1 BO   100 
2 HR   1500 
3 TD   1200 

這是真正實現?如果是,如何?

+2

你的樣品結果不符合您的樣本數據。 – FreeAsInBeer

+1

** @ FreeAsInBeer **,它確實。 'country'和'points'字段是'sample'表的外鍵。 – Linger

+0

這是一個非常奇怪的請求,雖然 – Strawberry

回答

5

你將不得不加入到sample表兩次爲了得到你之後(SQL FIDDLE)的信息:

SELECT p.id, s1.iso AS country, s2.pts AS points 
FROM points p 
INNER JOIN sample s1 ON p.country = s1.id 
INNER JOIN sample s2 ON p.points = s2.id 
+0

這應該是左連接[**演示內部連接**](http://sqlfiddle.com/#!2/2e577/6),[**演示左連接**](http://sqlfiddle.com /#!2/2e577/9) –

+0

** M Khalid Junaid **,在數據** Radical_Activity **提供的情況下INNER JOIN工作得很好。看我的SQL小提琴。我同意,如果有'country'或'points'不包含值的可能性,那麼應該使用LEFT JOIN。 – Linger

+0

@Linger是的,國家和地區有可能不包含任何價值。我也可以問你,這是否是一個常見的問題?我只是這樣做,所以如果'點'表得到一個新的行,它不會超載的信息。但我不知道哪個會更快。順便說一下,我有大約7列像國家,點等。估計行表中的點將約爲1000-2000,但它會在每個小時查詢很多。那麼這個解決方案是最好的還是應該只是簡單地將值放入'points'表中? –

0

左的幫助下加入或加入任何你能做到這一點

select t1.id,t1.country,t1.points from table1 as t1 left join table2 as t2 on t1.id=t2.country 
0

這聽起來像是你在找什麼。它是pointssample之間的內部連接,其匹配points.countrysample.idpoints.pointssample.pts

您提供的數據並未顯示匹配sample.pts的任何points.points,但我認爲這是您正在拍攝的內容。如果沒有,請在你的問題中澄清。

select p.id, s.iso, s.pts 
    from points p, sample s 
where p.country = s.id 
    and p.points = s.pts;