2014-07-07 56 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;