一些细节如果之间没有关系3桌,那么你可以只使用UNION
。它可以是如此简单:
SELECT receiver_id as event_id, event_name, event_description, event_timestamp FROM messages WHERE receiver_id = 10
UNION
SELECT client_id as event_id, event_name, event_description, event_timestamp FROM payments WHERE client_id = 10
UNION
SELECT receiver_id as event_id, event_name, event_description, event_timestamp FROM reports WHERE receiver_id = 10
这是假设对面有,你有兴趣在所有表列的一组常见。然而,如果列有不同的名称,但包含相同的数据(和数据类型)。那么你可以使用AS
重命名列的查询,实现UNION
SELECT receiver_id as event_id, col1 as event_name, col2 as event_description, col3 event_timestamp FROM messages WHERE receiver_id = 10
UNION
SELECT client_id as event_id, col_a as event_name, col_b as event_description, col_c event_timestamp FROM payments WHERE client_id = 10
UNION
SELECT receiver_id as event_id, col_x as event_name, col_y as event_description, col_z event_timestamp FROM reports WHERE receiver_id = 10
记住UNION
将消除在数据集中的重复行。如果这不是你想要的行为,那么改用UNION ALL
(它不会消除重复)。
另请注意,如果列数据类型在整个表中不相同,则必须将它们转换为常用类型。 Casting高度依赖于您的DBMS,因此请确保您使用正确的方法来完成此操作。
如果所有三个表都有关系,则使用JOINS。 – Viki888
请显示表格结构,样本数据和预期结果。 – Jens
在该示例中,receiver_id和client_id都等于10 - 是否可以安全地假设这些值构成表之间的关系? – RMathis