我的数据库中有2个表,一个叫做personalfirstteaminfo,第二个是status-kids
两个表之间的公共列是player_id
我想创建一个连接两个表的查询,并为每一行创建一个年龄列。
现在我使用了这个有效的查询 - 但我只得到了personalfirstteam表中的数据。我没有看到status-kids列(状态和孩子)
选择
p
。*,TIMESTAMPDIFF(年,生日,CURDATE())作为年龄从personalfirstteaminfo
作为p
自然加入(从{{选择s
。* 1}}为status-kids
)为T
任何想法? 当我尝试这样做时
谢谢。选择
s
。,p
。 FROMs
为personalfirstteaminfo
,p
为status-kids
其中{ {1}}。player_id =s
。player_id它会返回我需要的值,但是player_id列会显示两次。
答案 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不为空)