首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请问两个SQL语句~

2012-02-22 
请教两个SQL语句~~~两个多对多关系的表:employer与employee还有一个中间连接表:employmentmysqldescemplo

请教两个SQL语句~~~
两个多对多关系的表:employer与employee     还有一个中间连接表:employment

mysql>   desc   employer;
+------------+--------------+------+-----+---------+----------------+
|   Field             |   Type                   |   Null   |   Key   |   Default   |   Extra                     |
+------------+--------------+------+-----+---------+----------------+
|   employerid   |   int(11)             |             |   PRI   |   NULL         |   auto_increment   |
|   name               |   varchar(255)   |   YES     |           |   NULL         |                                 |
+------------+--------------+------+-----+---------+----------------+

mysql>   desc   employment;
+--------------+----------+------+-----+---------+----------------+
|   Field                 |   Type           |   Null   |   Key   |   Default   |   Extra                     |
+--------------+----------+------+-----+---------+----------------+
|   employmentid   |   int(11)     |             |   PRI   |   NULL         |   auto_increment   |
|   startDate         |   datetime   |   YES     |           |   NULL         |                                 |
|   endDate             |   datetime   |   YES     |           |   NULL         |                                 |
|   employerid       |   int(11)     |             |   MUL   |   0               |                                 |
|   employeeid       |   int(11)     |             |   MUL   |   0               |                                 |
+--------------+----------+------+-----+---------+----------------+

mysql>   desc   employee;
+---------------+--------------+------+-----+---------+----------------+
|   Field                   |   Type                   |   Null   |   Key   |   Default   |   Extra                     |
+---------------+--------------+------+-----+---------+----------------+
|   employeeid         |   int(11)             |             |   PRI   |   NULL         |   auto_increment   |


|   name                     |   varchar(255)   |   YES     |           |   NULL         |                                 |
|   taxfileNumber   |   varchar(255)   |   YES     |           |   NULL         |                                 |
+---------------+--------------+------+-----+---------+----------------+

为何执行以下两句查询之后的查询结果却大相径庭?望大家详细指点下!谢谢!
select   *   from   employer   er   left   join   employment   et   on   er.employerid   =   et.employerid   right   join   employee   ee   on   et.employeeid   =   ee.employeeid;

select   *   from   (select   *   from   employer   er   left   join   employment   et   on   er.employerid   =   et.employerid)   ss   right   join   employee   ee   on   ss.employeeid   =   ee.employeeid;


[解决办法]
以下全属猜测:
这个问题比较复杂。。。。主要是看语句执行的顺序,
第一句应该是先把employment和employee执行right join,在和employer进行left join
select * from employer er
left join employment et
right join employee ee on et.employeeid = ee.employeeid
on er.employerid = et.employerid

第二句先left join 可能就产生重复的employeeid。。。在right join可能数据条数会多。。。
select * from (select * from employer er left join employment et on er.employerid = et.employerid) ss right join employee ee on ss.employeeid = ee.employeeid;

select * 最好不要这么用。。。。
[解决办法]
猜测:
第一个SQL:可能是先将后面两个表先连接起来,将查询结果与第一个表连接.
而第二个SQL则是先连接前两个表.
[解决办法]
太复杂了,看到我头都大了。
[解决办法]
晕,我试了类似的SQL ,结果是一样的

热点排行