sql 左连接

record;   
+----+--------+--------+------------+------------+-------------+-------------------------------+
| id | caller | callee | starttimer | endtime    | recordstate | recordid                      |
+----+--------+--------+------------+------------+-------------+-------------------------------+
|  1 | 9007   | 9008   | 1322098171 | 1322098172 |           2 | 9007-9008-20111124-092930.wav | 
|  2 | 9007   | 9009   | 1322098215 | 1322098216 |           2 | 9007-9009-20111124-093013.wav | 
|  3 | 9007   | 9008   | 1322098222 | 1322098223 |           2 | 9007-9008-20111124-093022.wav | 
|  4 | 9008   | 9007   | 1322098227 | 1322098228 |           2 | 9008-9007-20111124-093026.wav | 
|  5 | 9008   | 9009   | 1322098232 | 1322098233 |           2 | 9008-9009-20111124-093031.wav | 
|  6 | 9007   | 9009   | 1322105279 | 1322105280 |           2 | 9007-9009-20111124-112758.wav | 
|  7 | 9008   | 9009   | 1322105291 | 1322105292 |           2 | 9008-9009-20111124-112810.wav | 

+----+--------+--------+------------+------------+-------------+-------------------------------+
schusrmgr;
+----+-------------+------+----------+
| id | loginnumber | user | usertype |
+----+-------------+------+----------+
|  1 | 9999        | 9009 |        0 | 
|  2 | 9999        | 4002 |        0 | 
|  3 | 9999        | 9008 |        0 | 
|  4 | 9999        | 9007 |        0 | 
|  6 | 9998        | 4002 |        0 | 
|  9 | 9998        | 9007 |        0 | 
+----+-------------+------+----------+

左连接:
select a.caller,a.callee,a.starttimer,a.endtime,a.recordstate,a.recordid 
from record a left join schusrmgr b on b.user = a.caller 

+--------+--------+------------+------------+-------------+-------------------------------+
| caller | callee | starttimer | endtime    | recordstate | recordid                      |
+--------+--------+------------+------------+-------------+-------------------------------+
| 9007   | 9008   | 1322098171 | 1322098172 |           2 | 9007-9008-20111124-092930.wav | 
| 9007   | 9008   | 1322098171 | 1322098172 |           2 | 9007-9008-20111124-092930.wav | 
| 9007   | 9009   | 1322098215 | 1322098216 |           2 | 9007-9009-20111124-093013.wav | 
| 9007   | 9009   | 1322098215 | 1322098216 |           2 | 9007-9009-20111124-093013.wav | 
| 9007   | 9008   | 1322098222 | 1322098223 |           2 | 9007-9008-20111124-093022.wav | 
| 9007   | 9008   | 1322098222 | 1322098223 |           2 | 9007-9008-20111124-093022.wav | 
| 9008   | 9007   | 1322098227 | 1322098228 |           2 | 9008-9007-20111124-093026.wav | 
| 9008   | 9009   | 1322098232 | 1322098233 |           2 | 9008-9009-20111124-093031.wav | 
| 9007   | 9009   | 1322105279 | 1322105280 |           2 | 9007-9009-20111124-112758.wav | 
| 9007   | 9009   | 1322105279 | 1322105280 |           2 | 9007-9009-20111124-112758.wav | 
| 9008   | 9009   | 1322105291 | 1322105292 |           2 | 9008-9009-20111124-112810.wav | 
+--------+--------+------------+------------+-------------+-------------------------------+

左表record的所有满足的记录都会显示,schusrmgr 中的每条记录都会和record匹配,所以记录会有重复显示

--取两个表相同的记录  b.loginnumber=9998
select a.caller,a.callee,a.starttimer,a.endtime,a.recordstate,a.recordid 
from vsrecord a 
where 
a.caller in (select b.user from vsschusrmgr b where b.loginnumber=9998)
or 
a.callee in (select b.user from vsschusrmgr b where b.loginnumber=9998);

你可能感兴趣的:(sql 左连接)