我有一个问题:
(SELECT col1 AS table1 FROM table1 WHERE col3 IS NOT NULL)
UNION ALL
(SELECT col1 AS table2 FROM table2 WHERE col3 IS NOT NULL)
UNION ALL
(SELECT col1 AS table3 FROM table3 WHERE col3 IS NOT NULL)
然而,当我使用PDO和fetchAll(PDO::FETCH_ASSOC);
命令处理它时,生成的数组的所有键都以table1的形式出现,而不管它们实际来自哪个表。
我的语法不正确吗?谢谢!
答案 0 :(得分:7)
您的查询会返回单个列。单个列只能有一个名称/别名。在UNION查询中,第一个子查询定义结果集的列名。
如果要指定每个值来自哪个表,请添加其他列,例如像这样:
(SELECT col1, 'table1' AS src FROM table1 WHERE col3 IS NOT NULL)
UNION ALL
(SELECT col1, 'table2' FROM table2 WHERE col3 IS NOT NULL)
UNION ALL
(SELECT col1, 'table3' FROM table3 WHERE col3 IS NOT NULL)
答案 1 :(得分:2)
这是SQL规范:结果集的列名取自第一个选择 这就是它的方式。
当你考虑它时,在后续选择中使用不同的列名是没有意义的,因为列名不能在结果集的中途改变 - 为(整个)结果集定义列名(一次)。
答案 2 :(得分:2)