-1

我的数据库中有两张表,一张叫personalfirstteaminfo,第二张叫status-kids

两个表之间的公共列是 player_id

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

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

SELECT p.* ,TIMESTAMPDIFF(YEAR,birthday,CURDATE()) as age FROM personalfirstteaminfoas pnatural join (select s.* from status-kidsas s) as T

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

选择p, s. FROM personalfirstteaminfoas p, status-kidsas swhere p.player_id = s.player_id

它确实返回了我需要的值,但 player_id 列显示了两次。

谢谢你。

4

2 回答 2

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
于 2014-09-24T16:28:03.217 回答
0

您可以使用

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

请注意:

  • 使用简单 * 而不命名任何表
  • 省略不需要的子选择
  • 表名status-kids必须被转义,因为它包含一个破折号。

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

  • 根据标准SQL,冗余列被消除,列顺序正确:
  • 首先,合并两个连接表的公共列,按照它们在第一个表中出现的顺序
  • 第二,第一个表唯一的列,按它们在该表中出现的顺序
  • 第三,第二个表唯一的列,按它们在该表中出现的顺序
  • 替换两个公共列的单个结果列是使用合并操作定义的。- 也就是说,对于两个 t1.a 和 t2.a,生成的单个连接列 a 定义为 a = COALESCE(t1.a, t2.a),其中: COALESCE(x, y) = (CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END)

资料来源:MySQL 手册,加入语法

于 2014-09-24T17:27:30.950 回答