日期:2014-05-16  浏览次数:20943 次

关于MYSQL的多表查询问题(含2个同名表)
我在mysql里面执行这个sql语句总是当机,高手来救命啊~

SELECT   b.AccountId,d.Description,d.Meaning,c.LevelCode,c.Value   FROM   PrismaLog   a   INNER   JOIN   PrismaLog   b   ON   a.AccountId=b.AccountId   AND   ON   a.Date=b.Date   AND   ON   a.ServerId=b.ServerId   INNER   JOIN   LogValue   c   ON   b.LogId=c.LogId   INNER   JOIN   LogMap   d   ON   c.LevelCode=d.LevelCode   WHERE   a.ServerId= 'sip13379 '   AND   (TO_DAYS(a.Date)-TO_DAYS( '2007-7-1 ')> =   0)   AND   (TO_DAYS(a.Date)-TO_DAYS( '2007-7-13 ')   <=   0)   AND   a.RecordId= '1040 '   AND   b.RecordId= '1030.0 '   AND   d.RecordId= '1030 '  

说明:前两个联合的表是同一个表。我的目的是:
1。从PrismaLog   中找到RecordId= '1040 '、ServerId= 'sip13379 '且日期在 '2007-7-1 '到 '2007-7-13 '之间的记录集A,
2。然后根据A的AccountId再查找PrismaLog   中AccountId=A.AccountId且RecordId= '1030.0 '   的记录集B,
3。然后根据B的LogId查找PrismaLog   x、LogValue   y与   LogMap   z的联表,其中x.LogId=B.LogId,y.LogId=x.LogId,z.LogValue=y.LogValue,z.RecordId= '1030 '  
最后希望能得到PrismaLog.AccountId,LogMap.Description,LogMap.Meaning,LogValue.LevelCode,LogValue.Value   。

另外也试了select   c1   from   t1   where   c2   in   (select   c2   from   t2   where   ...)的嵌套以及select   p.c1,q.c2   from   t1   p,t2   q   where   p.c3=...   and   q.c6=...这样的语句。。。都是当机。不知道哪里出了问题。憋了好几天了。。。好人来帮忙啊。。



------解决方案--------------------

select LogId from PrismaLog where AccountId in
(select AccountId from PrismaLog where RecordId= '1040 'and ServerId= 'sip13379 '且日期在 '2007-7-1 '到 '2007-7-13 ') and RecordId= '1030.0 '

以上就是b出来的logid

然后你再把x,y,z的关联继续写就是了

ps:你的第三个逻辑,我没看明白