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