Mysql 通过比较具有相同列的两个表来获得结果

Mysql 通过比较具有相同列的两个表来获得结果,mysql,Mysql,两者之间的时差为4秒。我想计算一下差额 使用某种类型的查询。我知道TimeFinder()和联接,但缺乏形成查询的技能 在这一点上 以下是我迄今为止的尝试: mysql> select * from on_connected; +----+-----------+-------------+---------------------------+---------------------+ | id | extension | destination | call_id

两者之间的时差为4秒。我想计算一下差额 使用某种类型的查询。我知道TimeFinder()和联接,但缺乏形成查询的技能 在这一点上

以下是我迄今为止的尝试:

mysql> select * from on_connected;
+----+-----------+-------------+---------------------------+---------------------+
| id | extension | destination | call_id                   | created_at          |
+----+-----------+-------------+---------------------------+---------------------+
| 11 |   1111111 | 01155555551 | 521243ad953e-965inwuz1gku | 2013-08-19 17:11:53 |
+----+-----------+-------------+---------------------------+---------------------+

mysql> select * from on_disconnected;
+----+-----------+-------------+---------------------------+---------------------+
| id | extension | destination | call_id                   | created_at          |
+----+-----------+-------------+---------------------------+---------------------+
|  1 |   1111111 | 01155555551 | 521243ad953e-965inwuz1gku | 2013-08-19 17:11:57 |
+----+-----------+-------------+---------------------------+---------------------+
1 row in set (0.00 sec)
Mysql报告:

SELECT TIMEDIFF(to_seconds(od.created_at), to_seconds(oc.created_at)) 
FROM on_connected oc 
JOIN on_disconnected od 
ON oc.call_id=od.call_id 
WHERE call_id='521243ad953e-965inwuz1gku';

在where子句中

ERROR 1052 (23000): Column 'call_id' in where clause is ambiguous


没关系。

如果您想要所有时间的差异:

WHERE od.call_id='521243ad953e-965inwuz1gku';

对于单个
调用\u id
,您需要在筛选器中别名列名:

SELECT TIME_TO_SEC(TIMEDIFF(od.created_at, oc.created_at)) 
FROM on_connected oc
JOIN on_disconnected od ON od.call_id = oc.call_id

在where子句中尝试oc.call\u id


尽管此时值已经匹配,sql解析器仍然需要知道您所指的是哪一个。

当您使用两个表中名称相同的列连接两个表时,您可以使用
using
子句而不是
ON

WHERE oc.call_id = '521243ad953e-965inwuz1gku'

这不仅可以节省一些关键的时间,而且通过这样做,您可以在不指定表名的情况下引用该列。

一些优秀的回复,fancyPants首先进入了那里,但我将在数据库中考虑所有答案。谢谢
SELECT TIME_TO_SEC(TIMEDIFF(od.created_at, oc.created_at)) 
FROM on_connected oc
JOIN on_disconnected od ON od.call_id = oc.call_id
WHERE oc.call_id = '521243ad953e-965inwuz1gku'
SELECT TIMEDIFF(to_seconds(od.created_at), to_seconds(oc.created_at)) 
FROM on_connected oc 
JOIN on_disconnected od 
USING(call_id)                             -- eq. to `od.call_id = oc.call_id`
WHERE call_id='521243ad953e-965inwuz1gku'; -- no need to specify the table name here