2013-05-10 113 views
0

如果我有这两个表:如何从两个表中选择?

table_user 
Id name lname 
1 Mark Brown 
2 Martha Fox 

table_score_start: 
user_Id score 
2  5 

table_score_last: 
user_Id score 
1  3 
2  4 

我如何可以显示下面的查询结果呢?

ID名称LNAME得分得分 1马克·布朗3 2玛莎·福克斯5 4

我试图

SELECT table_user.Id, table_user.name, table_user.lname, table_score_start.score, 
table_score_last.score FROM table_user, table_score_start, table_score_last 

但它不工作

我也试过

SELECT table_user.Id, table_user.name, table_user.lname, table_score_start.score, 
table_score_last.score FROM table_user, table_score_start, table_score_last WHERE table_user.Id = table_score_start.user_Id 

我想要显示所有的记录认为包括那些不是在一个或两个表的表table_score_start和table_score_last

+0

什么是错误?或者只是空的结果? – powtac 2013-05-10 18:59:47

+0

@ antonioj1015做一个好的支持者。开始接受答案。 – 2013-05-11 09:27:59

+0

你解决了你的问题吗? – 2013-06-12 22:42:00

回答

2

尝试以下查询:

SELECT u.Id, u.name, u.lname, s.score, l.score FROM table_user u, 
table_score_start s, table_score_last l WHERE u.id = s.user_id 
AND u.id = l.user_id 

或者使用联接:

SELECT u.Id, u.name, u.lname, s.score, l.score FROM table_user u 
INNER JOIN table_score_start s ON (u.id = s.user_id) 
INNER JOIN table_score_last l ON (u.id = l.user_id) 

你可以阅读更多关于MySQL加入这篇文章:http://dev.mysql.com/doc/refman/5.0/en/join.html

2
select a.Id, a.name, a.lname, b.score as start_score, c.score as last_score from table_user a 
inner join table_score_start b on (a.Id = b.user_Id) 
inner join table_score_last c on (a.Id = c.userId) 

inner joinleft join取决于您的需求。

0
SELECT `user`.*, `start`.score, `last`.score 
FROM table_user `user`, table_score_start `start`, table_score_last `last` 
WHERE `start`.user_Id = `user`.Id 
AND `last`.user_Id = `user`.Id; 
0

像这样的东西应该做的伎俩:

SELECT u.ID, u.name, u.lname, start.score, last.score 
FROM table_user AS u LEFT JOIN table_Score_Start AS Start on u.ID = Start.ID 
LEFT JOIN table_Score_last AS Last on u.id = Last.ID 

它不在我头顶,但应该让你进入球场。你可能不得不做一些MySQL语法的调整,我一直在SQL Server中工作。

0

当您针对多个表运行SELECT时,还应在这些表之间包含JOIN条件。这里的地方开始阅读JOINS

请尝试以下操作。也请不要使用别名,这会使代码更容易阅读,但对执行没有影响。

SELECT u.Id 
     ,u.name 
     ,u.lname 
     ,ss.score 
     ,sl.score 
FROM table_user u 
INNER JOIN 
     table_score_start ss 
ON  ss.user_ID = u.Id 
INNER JOIN 
     table_score_last sl 
ON  sl.user_ID = u.Id 
0

在其他的答案我看到INNER JOIN,但因为你还希望看到没有开始或结束的分数(或两者)的记录,你应该使用LEFT JOIN这样的:

SELECT a.Id, a.name, a.lname, b.score as start_score, c.score as last_score 
FROM table_user a 
LEFT join table_score_start b on (a.Id = b.user_Id) 
LEFT join table_score_last c on (a.Id = c.user_Id)