如何基于多个记录使用MySQL选择多列?

3

我现在有两个表格,它们分别如下:

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表中选取与sample.isosample.pts对应的points.countrypoints.points的所有数据。

因此,我想要实现的结果是:

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

这是否真的可以实现?如果是,怎么做呢?

2
你的样本结果与你的样本数据不相符。 - FreeAsInBeer
1
@FreeAsInBeer,确实如此。countrypoints字段是指向sample表的外键。 - Linger
这确实是一个非常奇怪的请求。 - Strawberry
@Linger,我的上一条评论并不是关于你两个表之间的关系,而是关于你的表与你提供的样本结果之间的关系。在你的结果中,你有BO, 100,但在你的表中,BOpoints = 1pts = 1200相关联。请记住,在未来的问题中提供逻辑数据集会更容易获得建设性的答案。 - FreeAsInBeer
3个回答

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  

这应该是左连接 演示内连接演示左连接 - M Khalid Junaid
在数据 Radical_Activity 提供的情况下,INNER JOIN 可以正常工作。请参见我的 SQL Fiddle。但是,如果存在 countrypoints 不包含值的可能性,则应使用 LEFT JOIN。 - Linger
@Linger 是的,country和points可能不包含值。另外,我可以问一下这是否是常见查询?我只是这样做的,所以如果'points'表得到一个新行,它不会超载信息。然而,我不知道哪个更快。顺便说一下,我有大约7列像国家,积分等。点数表中的预估行数将约为1000-2000,但在每小时内将频繁查询。所以这种解决方案是最好的还是我应该简单地将值放入“points”表中? - Radical_Activity
@Radical_Activity,对于所有加入到“sample”表的连接,您将希望使用LEFT JOIN。多次加入同一张表格是很常见的。但是,您的方式并不常见,因为“country”和“points”根本没有关联,但它们在同一个表格中。我可以看到“country”成为自己的表格,因为一个“country”可能有很多信息与之相关。然而,“points”可能最好直接存储在“points”表格中,因为我猜测您可以进一步扩展“points”。 - Linger

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.id,并将points.points匹配到sample.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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接