为什么这个错误? (将值传递给连接表)

时间:2013-10-24 16:05:16

标签: php mysql sql

为什么会出现这个错误? :

#1054 - Unknown column 'm2.s_sender_id' in 'where clause' 

在这个查询中:在这个查询中:我需要在这个地方传递m2.s_sender_id!

    select w.ct,m5.pc, w.s_thread_id,w.unread , w.draft , w.s_user_id , m2.s_subject ,m2.s_sender_id starter, LEFT(m3.s_message,20) , m3.s_date_sent from 
(SELECT  max(m.id) mxid , min(m.id) mnid ,min(r.s_unread_count) unread , 
    COUNT(IF(m.s_sender_id = 534 and m.s_status = 0,1,NULL))  draft,
    COUNT(IF(m.s_sender_id = 534 or m.s_sender_id = 2,1,NULL)) pc,
    count(r.s_thread_id) ct ,
    r.s_user_id , r.s_thread_id 
     FROM  t_messages_messages m
     LEFT JOIN t_messages_recipients r on (m.s_thread_id = r.s_thread_id )
where  r.s_is_deleted = 0  AND r.s_user_id = 534 AND r.s_sender_only = 0  AND (r.s_is_arshived is null or r.s_is_arshived = 0)
GROUP BY m.s_thread_id) w
inner join t_messages_messages m2 on (m2.id=w.mnid)
inner join t_messages_messages m3 on (m3.id=w.mxid)
inner join ( 
    SELECT COUNT( m4.id ) pc FROM  t_messages_messages m4
    where ( m4.s_sender_id = 534 or m4.s_sender_id =  m2.s_sender_id )
 ) m5 on (m5.s_thread_id = w.s_thread_id)enter code here

1 个答案:

答案 0 :(得分:1)

问题在于您的派生表:

( 
SELECT COUNT( m4.id ) pc FROM  t_messages_messages m4
where ( m4.s_sender_id = 534 or m4.s_sender_id =  m2.s_sender_id )
) m5 on (m5.s_thread_id = w.s_thread_id) enter 

它必须能够独立运行,但不能因为此子查询中不存在m2。如果要引用m2,则必须在派生表外部执行此操作,或者将m2合并到派生表中。