gpt4 book ai didi

mysql - 从多个表中选择某些字段而不进行任何连接

转载 作者:行者123 更新时间:2023-11-29 14:25:11 25 4
gpt4 key购买 nike

我有 5 个表(tbl1、tbl2、tbl3、tbl4、tbl5),它们都有相似的列,但没有 fk 共享。我需要按照时间戳(每个表都有的列)的顺序编译项目列表。我尝试了以下方法,但没有成功:

SELECT 
t1.id, t1.name, t1.created,
t2.id, t2.name, t2.created,
t3.id, t3.name, t3.created,
t4.id, t4.name, t4.created,
t5.id, t5.name, t5.created
FROM tbl1 t1, tbl2 t2, tbl3 t3, tbl4 t4, tbl5 t5;

显然,上面的内容不会按时间戳列排序,但在添加“ORDER BY”子句之前,我需要让类似的东西起作用。

有没有办法(无需创建 View )运行一个查询,该查询返回 5 个表中的数据(如果某些表为空,则发生事件)?

最佳答案

听起来您正在寻找的是 UNION ALL 运算符。

SELECT t1.id, t1.name, t1.created FROM tbl1 t1
UNION ALL
SELECT t2.id, t2.name, t2.created FROM tbl2 t2
UNION ALL
SELECT t3.id, t3.name, t3.created FROM tbl3 t3
UNION ALL
SELECT t4.id, t4.name, t4.created FROM tbl4 t4
UNION ALL
SELECT t5.id, t5.name, t5.created FROM tbl5 t5
ORDER BY 3

UNION ALL 运算符基本上将查询结果连接到单个结果集中。请注意,所有查询中的表达式数量和每个表达式的数据类型必须匹配。 (如果您需要在其中一个查询中包含额外的列,则需要在其他查询中添加相应的表达式(甚至是虚拟占位符)。

当我执行这样的查询时,包含一个表达式(列)有时会很有帮助,它告诉我哪个源查询返回了该行:

SELECT 't1' as source, t1.id, t1.name, t1.created FROM tbl1 t1
UNION ALL
SELECT 't2', t2.id, t2.name, t2.created FROM tbl2 t2
UNION ALL
SELECT 't3', t3.id, t3.name, t3.created FROM tbl3 t3
UNION ALL
SELECT 't4', t4.id, t4.name, t4.created FROM tbl4 t4
UNION ALL
SELECT 't5', t5.id, t5.name, t5.created FROM tbl5 t5
ORDER BY 4

请注意,ORDER BY 适用于整个结果集,并且您必须引用表达式以按列位置排序。

关于mysql - 从多个表中选择某些字段而不进行任何连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11123610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com