该行来自哪个 table?

Which table does the row come from?

这是我的查询:

SELECT * 
FROM messages 
WHERE status = 1 
AND (
    poster IN (SELECT thing FROM follows WHERE follower = :uid AND type = 3) 
    OR 
    topic_id IN (SELECT thing FROM follows WHERE follower = :uid AND type = 1)
) 
ORDER BY post_date DESC LIMIT 0, 20

我想知道这些行来自哪个子句。从 poster IN (...) 部分还是 topic_id IN (...) 部分?我该怎么做?

一个简单的方法:

SELECT *
     , CASE WHEN poster IN (SELECT thing FROM follows WHERE follower = :uid AND type = 3) THEN 'poster' 
            ELSE 'topic_id' END AS from_clause
FROM messages <..>

另一种方式:

SELECT m.* 
     , CASE WHEN t1.thing IS NULL THEN 'topic_id' ELSE `poster` END AS from_clause
FROM messages m 
LEFT JOIN (SELECT thing FROM follows WHERE follower = :uid AND type = 3) t1 ON m.poster = t1.thing
LEFT JOIN (SELECT thing FROM follows WHERE follower = :uid AND type = 1) t2 ON m.topic_id = t2.thing
WHERE m.status = 1  AND (t1.thing IS NOT NULL OR t2.thing IS NOT NULL)