2011-10-09 83 views
0

尝试将表“fab_qouta.qoutatype”连接到子查询“fab_status_members.statustype”中的值,但它不返回任何内容。加入子查询返回失败

如果我在查询中直接加入2个表格,结果是正确的。

像这样:

select statustype, takst 
from 
    fab_status_members AS sm 
    join fab_quota as fq 
     ON fq.quotatype = sm.statustype 

所以我必须做一些错误的,这里的子查询代码,任何帮助赞赏

select 
    ju.id, 
    name, 
    statustype, 
    takst 

from jos_users AS ju 
    join 
    (SELECT sm.Members AS MemberId, MaxDate , st.statustype 
     FROM fab_status_type AS st 
     JOIN fab_status_members AS sm 
      ON (st.id = sm.statustype) -- tabels are joined 
     JOIN 
      (SELECT members, MAX(pr_dato) AS MaxDate -- choose members and Maxdate from 
      FROM fab_status_members 
      WHERE pr_dato <= '2011-07-01' 
      GROUP BY members 
     ) 
      AS sq 
      ON (sm.members = sq.members AND sm.pr_dato = sq.MaxDate) 
    ) as TT 
    ON ju.id = TT.Memberid 
    join fab_quota as fq 
    ON fq.quotatype = TT.statustype 
GROUP BY id 

想这个问题是在该行:加入fab_quota为FQ ON fq.quotatype = TT.statustype

但我似乎无法通过它来看看:-(

个最好的问候

托马斯

+0

在子查询中有'sm.statustype'和'st.statustype'。这是正确还是错字? –

回答

0

看起来要加入到每个成员中最少的组合与给定日期各自的最高值pr_dato。我会拉这第一个查询位置,而不是被掩埋,然后将其重新加入到休息...

select STRAIGHT_JOIN 
     ju.id, 
     ju.name, 
     fst.statustype, 
     takst 
    from 
     (SELECT 
       members, 
       MAX(pr_dato) AS MaxDate 
      FROM 
       fab_status_members 
      WHERE 
       pr_dato <= '2011-07-01' 
      GROUP BY 
       members) MaxDatePerMember 

     JOIN jos_users ju 
     on MaxDatePerMember.members = ju.ID 

     JOIN fab_status_members fsm 
     on MaxDatePerMember.members = fsm.members 
     AND MaxDatePerMember.MaxDate = fsm.pr_dato 

     JOIN fab_status_type fst 
      on fsm.statustype = fst.id 

      JOIN fab_quota as fq 
       on fst.statusType = fq.quotaType 

我想我有所有你想要什么,并让我在简单的话重申我想你想要。每个成员可以有多个状态条目(通过Fab_Status_Members)。您正在寻找所有成员,以及他们最近的最新状态是哪一天的特定日期。这是第一个查询。

从此,无论用户有资格,我加入到用户表以获取他们的姓名信息(第一次加入)。

现在,回到复杂的部分。从确定最近日期状态活动的第一个查询中,重新连接回同一个表(fab_status_members),并获取该成员的最后状态日期(第二次连接)的实际状态码SPECIFIC。

根据在最大日期获取每个成员的正确状态的结果,您需要获取代码表示的状态类型(第三次加入fab_status_type)。

最后,从了解fab_status_type,它的配额类型是什么。

由于第一个查询按成员ID分组,因此不应该需要该组,因此每个人都会返回一个条目(除非......可能在同一天在fab_status_members表中具有多个状态类型...除非这是一个完整的日期/时间字段,那么你没事)

不确定“takst”列哪个表来自,但我试图完全限定表名(或别名)他们来自我的猜测是它来自QuotaType表。

......从注释编辑...

对不起,是啊,FQ最后加入。至于它没有返回任何行,我会一次尝试一个,并查看中断的位置......我将每次启动一个...... maxdate查询中的多少条,然后将该连接添加到用户以使确保返回相同的记录数。然后为特定成员/日期活动添加FSM(重新加入),然后将其添加到状态类型...某处沿着它的链条丢失了,唯一我能想到的是状态类型错过,因为任何成员状态都必须与其中一个用户相关联,并且它应该找回自己,因为那是最大日期来源于。我正在将它加入状态类型或配额的某处。

+0

哇现货上,我正在尝试做。该评分来自fab_quota表格作为“支付”价值。然而,使用你的代码给出了以下错误:错误代码:1054.'on子句'中的未知列'sq.quotaType'同样我尝试尝试接收。 – user857558

+0

假设它应该是fq,但它不返回任何行 – user857558

+0

Ahhh发现应该是:JOIN fab_quota fq fsm.statusType = fq.quotatype最后一行Thankyou非常多 – user857558