0

次の結果(A)と(B)を返す2つのクエリがあります:

SELECT username, ext_num FROM user u 
JOIN extension e 
ON u.id=e.user_id;
+----------+---------+
| username | ext_num |
+----------+---------+
| test     | 2459871 |
+----------+---------+
1 row in set (0.00 sec)

SELECT TIME_TO_SEC(TIMEDIFF(od.created_at, oc.created_at)) as `duration (sec)`, oc.ext_num, oc.destination, oc.created_at, oc.call_id
-> FROM on_connected oc
-> JOIN on_disconnected od ON od.call_id = oc.call_id
-> WHERE oc.ext_num = 2459871\G;
*************************** 1. row ***************************
duration (sec): 4
   ext_num: 2459871
destination: 55544466677
created_at: 2013-08-19 17:11:53
   call_id: 521243ad953e-965inwuz1gku
*************************** 2. row ***************************
duration (sec): 4
   ext_num: 2459871
destination: 55544466677
created_at: 2013-08-20 10:28:48
   call_id: 521336b51225-0w4mkelwpfui
2 rows in set (0.00 sec)

上記の 2 つのテーブルを結合して、次のようなものを返したいと思います。

+----------------+----------------+-----------------------+---------------------+---------------------------+
| username       | duration (sec) | ext_num | destination | created_at          | call_id                   |
+----------------+----------------+-----------------------+---------------------+---------------------------+
| test           |              4 | 2459871 | 55544466677 | 2013-08-19 17:11:53 | 521243ad953e-965inwuz1gku |
| test           |              4 | 2459871 | 55544466677 | 2013-08-20 10:28:48 | 521336b51225-0w4mkelwpfui |
+----------------+----------------+-----------------------+---------------------+---------------------------+

理論的には、特定の「ext_num」発言に対して行われたすべての通話を返すか、必要に応じて「call_id」に関する詳細なレポートを返すことができます。

私は何を試しましたか?さて、私は最初にUNION演算子について考えました:

(A) UNION (B);

ここで、(A) は SELECT ステートメントで NULL 値で埋められましたが、これにより不安定な結果が生成されました。

+----------------+---------+-------------+---------------------+
| duration (sec) | ext_num | destination | created_at          |
+----------------+---------+-------------+---------------------+
| 4              | 2459871 | 55544466677 | 2013-08-19 17:11:53 |
| 4              | 2459871 | 55544466677 | 2013-08-20 10:28:48 |
| test           | 2459871 | NULL        | NULL                |
+----------------+---------+-------------+---------------------+
3 rows in set (0.01 sec)
4

1 に答える 1

0

これを試してください

SELECT * FROM 
(SELECT username, ext_num FROM USER u 
JOIN extension e 
ON u.id=e.user_id) a

INNER JOIN

(SELECT TIME_TO_SEC(TIMEDIFF(od.created_at, oc.created_at)) AS `duration (sec)`, oc.ext_num, oc.destination, oc.created_at, oc.call_id
 FROM on_connected oc
JOIN on_disconnected od ON od.call_id = oc.call_id
WHERE oc.ext_num = 2459871 ) b    
ON (a.ext_num = b.ext_num)

他の方法で 4 つのテーブルすべてを結合する

SELECT u.username TIME_TO_SEC(TIMEDIFF(od.created_at, oc.created_at)) AS `duration (sec)`, oc.ext_num, oc.destination, oc.created_at, oc.call_id
 FROM on_connected oc
JOIN on_disconnected od ON od.call_id = oc.call_id
JOIN extension e ON (oc.ext_num = e.ext_num)
JOIN `user` u ON (u.id=e.user_id)
WHERE oc.ext_num = 2459871
于 2013-08-20T10:52:01.770 に答える