Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个MySQL查询中使用两个左外部联接时,如果第一个联接为空,则不会触发第二个联接_Mysql_Join_Left Join - Fatal编程技术网

在一个MySQL查询中使用两个左外部联接时,如果第一个联接为空,则不会触发第二个联接

在一个MySQL查询中使用两个左外部联接时,如果第一个联接为空,则不会触发第二个联接,mysql,join,left-join,Mysql,Join,Left Join,我正试图建立一个摄影网站,我正在建设饲料。下面是获取前一天发生的所有活动的查询。如果在最后一天(第一个左外部连接)留下了一条注释,但如果只有like(第二个左外部连接)发生了,则返回空。我认为问题是,如果第一个左外连接是空的,那么第二个似乎没有启动。如果我的假设是正确的,你知道如何让第二个开火,而不管第一个的结果如何吗 SELECT a.a_id , a.a_user_id , a.a_activity_type , a.a

我正试图建立一个摄影网站,我正在建设饲料。下面是获取前一天发生的所有活动的查询。如果在最后一天(第一个左外部连接)留下了一条注释,但如果只有like(第二个左外部连接)发生了,则返回空。我认为问题是,如果第一个左外连接是空的,那么第二个似乎没有启动。如果我的假设是正确的,你知道如何让第二个开火,而不管第一个的结果如何吗

SELECT a.a_id
            , a.a_user_id
            , a.a_activity_type
            , a.a_activity_id
            , a.a_activity_time
            , c.ic_id 
            , c.ic_status
            , c.ic_image_id
            , c.ic_creator_id
            , c.ic_comment
            , c.ic_read_status
            , s.id 
            , s.image_id 
            , s.photographer_id
            , s.user_id
            , u.u_id
            , u.u_screen_name
            , u.u_url_screen_name
            , u.u_email
            , u.u_avatar
            , u1.u_id as currentUser
            , u1.u_email as currentEmail
            , u1.u_url_screen_name as currentScreenName
            , i.i_id
            , i.i_name
            , COALESCE(c.ic_image_id, s.image_id) as image_id
            , COALESCE(c.ic_creator_id, s.photographer_id) as other_user_id
            FROM activity AS a
                LEFT OUTER JOIN image_comments as c ON 
                a.a_activity_id = c.ic_id AND a.a_activity_type = 1
                LEFT OUTER JOIN site_likes as s ON 
                a.a_activity_id = s.id AND a.a_activity_type = 2
                LEFT JOIN users as u ON
                u.u_id = COALESCE(c.ic_creator_id, s.photographer_id)
                LEFT JOIN images as i ON
                i.i_id = COALESCE(c.ic_image_id, s.image_id)
                LEFT JOIN users as u1 ON
                u1.u_id = a.a_user_id
            WHERE a.a_activity_time >= DATE_SUB(now(), INTERVAL 1 DAY)
            AND
            COALESCE(c.ic_creator_id, s.photographer_id) != a.a_user_id
            ORDER BY a.a_activity_time DESC

更新:进一步测试后,WHERE子句中的COALESCE()似乎是问题所在。其中一个字段将始终具有值,而另一个字段则不具有值。如果我去掉这个,查询就可以正常工作,这是很好的,因为我可以按原样使用它,然后在应用程序中删除我需要删除的内容,但我仍然希望它在查询中工作

只要我能看到你在用各种左键连接。唯一需要有数据的表是activity。但是在WHERE子句中使用site_likes(s)和image_comments(c),因此两者都必须有数据。您可以使用类似“或c.ic_creator_id为NULL”的内容,我的印象是COALESCE()将取具有值的值并返回它。在这种情况下,两个值中的一个始终具有值。