合并2个表用于SELECT查询?

时间:2009-07-15 06:10:12

标签: mysql database join merge

首先..这里是我创建的两个表(没有相关的列)..

CREATE TABLE users_history1 (
  circuit tinyint(1) unsigned NOT NULL default '0',
  userh_season smallint(4) unsigned NOT NULL default '0',
  userh_userid int(11) unsigned NOT NULL default '0',
  userh_rank varchar(2) NOT NULL default 'D',
  userh_wins int(11) NOT NULL default '0',
  userh_losses int(11) NOT NULL default '0',
  userh_points int(11) NOT NULL default '1000',
  KEY (circuit, userh_userid),
  KEY (userh_season)
) ENGINE=MyISAM;

CREATE TABLE users_ladders1 (
  circuit tinyint(1) unsigned NOT NULL default '0',
  userl_userid int(11) unsigned NOT NULL default '0',
  userl_rank char(2) NOT NULL default 'D',
  userl_wins smallint(3) NOT NULL default '0',
  userl_losses smallint(3) NOT NULL default '0',
  userl_points smallint(4) unsigned NOT NULL default '1000',
  PRIMARY KEY (circuit, userl_userid),
  KEY (userl_userid)
) ENGINE=MyISAM;

一些背景......这些表格包含竞争阶梯的数据,其中玩家通过积分在有序排名上相互比较。 users_history1是一个包含以前季节存储的记录的表。 users_ladders1包含当前季节的记录。我正在尝试在我的网站上创建一个页面,其中玩家按其先前记录和当前记录的平均点进行排名。以下是1v1阶梯的主要排名: http://vilegaming.com/league.x/standings1/3

我想从两个表中的数据库中选择一个有序列表播放器,具体取决于他们的users_ladders1和users_history1记录的平均点数。我真的不知道如何在一个查询中从两个表中进行选择,但我会尝试尽可能通用,以说明它..

在整个示例中使用连字符,因为SO使它变得奇怪。

SELECT userh-points 
FROM users-history1 
GROUP BY userh-userid 
ORDER BY (total userh-points for the user)

需要GROUP BY,因为有些球员可能在之前的多个赛季都有过比赛。

SELECT userl-points 
FROM users-ladders1 
ORDER BY userl-points

我希望能够在查询中组合两个表,以便我可以按总点数排序的行获取数据,如果可能的话,还可以将总点数除以播放器的唯一记录数量,这样我就可以得到平均值。

3 个答案:

答案 0 :(得分:15)

您需要使用UNION SELECT

SELECT p.id, COUNT(p.id), SUM(p.points)
FROM (SELECT userh_userid AS id, userh_points AS points
      FROM users_history1
      UNION SELECT userl_userid, userl_points
      FROM users_ladders1) AS p
GROUP BY p.id

子查询是重要的部分。它将为您提供一个表,其中包含当前表和历史表的结果。然后,您可以从该表中进行选择,并执行COUNT和SUM以获得平均值。

我的MySQL语法非常生疏,请原谅。我没有机会运行它,所以我甚至不确定它是否执行,但它应该足以让你开始。

答案 1 :(得分:2)

如果要合并到表中,并且想要从一个表中选择特定列,而在另一个表中想要选择所有列。

e.g。

Table name = test1 , test2

查询:

SELECT test1.column1,test1.column2, test2.* FROM test1 ,test2

如果要与特定列合并

查询:

SELECT test1.column1,test1.column2, test2.* FROM test1 ,test2 where test2.column3='(what ever condition u want to pass)'

答案 2 :(得分:-1)

Select col1 from test1 where id = '1'
union 
select * from table2 

这个也可用于加入表格。