自然连接操作仅返回mysql数据库中的第一个表

时间:2014-09-24 16:25:56

标签: mysql sql sql-server natural-join

我的数据库中有2个表,一个叫做personalfirstteaminfo,第二个是status-kids

两个表之间的公共列是player_id

我想创建一个连接两个表的查询,并为每一行创建一个年龄列。

现在我使用了这个有效的查询 - 但我只得到了personalfirstteam表中的数据。我没有看到status-kids列(状态和孩子)

  

选择p。*,TIMESTAMPDIFF(年,生日,CURDATE())作为年龄从personalfirstteaminfo作为p自然加入(从{{选择s。* 1}}为status-kids)为T

任何想法? 当我尝试这样做时

  

选择sp FROM spersonalfirstteaminfopstatus-kids其中{ {1}}。player_id = s。player_id

     

它会返回我需要的值,但是player_id列会显示两次。

谢谢。

2 个答案:

答案 0 :(得分:0)

你没有从第二个表中选择任何列 - 尝试:

SELECT p.*, t.* ,TIMESTAMPDIFF(YEAR,birthday,CURDATE()) as age 
FROM personalfirstteaminfo as p natural join (select s.* from status-kids as s) as T

答案 1 :(得分:0)

您可以使用

SELECT *, TIMESTAMPDIFF(YEAR,birthday,CURDATE()) as age 
FROM personalfirstteaminfo as p 
natural join `status-kids`

请注意:

  • 使用简单*而不命名任何表
  • 省略不需要的子选择
  • 表名status-kids必须转义,因为它包含短划线。

对于自然连接,MySQL将执行以下操作

  
      
  • 根据标准SQL:
  • 删除冗余列并且列顺序正确   
  • 首先,两个连接表的合并公共列,按照它们出现在第一个表中的顺序
  •   
  • 其次,第一个表所特有的列,按照它们在该表中出现的顺序
  •   
  • 第三,第二个表独有的列,按照它们出现在该表中的顺序
  •   
  • 使用coalesce操作定义替换两个公共列的单个结果列。 - 也就是说,两个t1.a和t2.a   结果单个连接列a定义为a = COALESCE(t1.a,t2.a),   其中:COALESCE(x,y)=(当V1 V1 = V2结束时V1不为空)
  •   

来源:MySQL manual, Join Syntax