sql - 错误:使用 UNION 和 CASE postgresql 的表缺少 FROM 子句条目
问题描述
我正在尝试VIEW
使用UNION
,我想要column
动态,为此我正在使用CASE
.
关注代码:
CREATE VIEW exportU
AS
SELECT
email_user
cast(null as int) as blabla1
cast(null as int) as blabla2,
cast(null as varchar) as blabla3
FROM table1 a
UNION
SELECT
cast(null as varchar) as email_user
cast(null as int) as blabla1
cast(null as int) as blabla2,
cast(null as varchar) as blabla3
FROM table2 b
UNION
SELECT
cast(null as varchar) as email_user
intColumn,
intColumn2,
new_position_id,
(CASE WHEN a.email_user = c.filled_by THEN a.email_user ELSE c.filled_by END) as "fill"
FROM table3 c
我收到那个错误:
ERROR: missing FROM-clause entry for table "a" LINE 156: (CASE WHEN a.email_user = c.filled_by THEN a.email_user ELSE c.filled...
我不知道为什么,我alias
在表名之后使用..
有人能帮我吗 ?
解决方案
您必须小心逗号以及列的类型和数量。他们必须匹配所有工会。
这是我如何使其工作的示例:
我必须在第一个选择上创建一个虚拟列,因为最后一个选择有一个额外的列。此外,每一列都需要是相同的类型
CREATE VIEW exportU
AS
SELECT
cast(null as varchar) as email_user,
cast(null as int) as blabla1,
cast(null as int) as blabla2,
cast(null as varchar) as blabla3,
0 as dummy
FROM table1 a
UNION
SELECT
cast(null as varchar) as email_user,
cast(null as int) as blabla1,
cast(null as int) as blabla2,
cast(null as varchar) as blabla3,
0 as dummy
FROM table1 b
UNION
SELECT
cast(null as varchar) as email_user,
cast(null as int) as blabla1,
cast(null as int) as blabla2,
'0' as new_position_id, -- blabla3
(CASE WHEN 0 = 0 THEN 1 ELSE 2 END) as "fill"
FROM table1 c
而且这种情况是多余的。您可以将其替换为只是c.filled_by
因为如果它们相等,则分配哪一个并不重要
CASE WHEN a.email_user = c.filled_by THEN a.email_user ELSE c.filled_by END
推荐阅读
- python - 我如何在我的亚马逊蜘蛛中使用scrapy的Itemloader,以便我可以从输出中删除所有新行字符或额外的空格
- javascript - 这个 php 片段的 javascript 等价物
- python - 有没有办法让尽可能多的 selenium web 浏览器出现在用户请求中,使用 for 循环或其他东西。如果是这样,我该怎么做?
- azure-cosmosdb - CosmosDB V3 配置 ChangeFeedProcessor ChangeFeedOptions 以使用分区键
- mongodb - MongoDB 文本搜索、精确短语和逻辑运算符
- javascript - 如何知道函数是否被带有 addEventListener 的元素调用?
- android - 无法更新 Firebase 数据库中的项目
- ios - 更新 Firestore 数据库中不再存在的数据时出现批量写入问题 - iOS Swift
- c# - 查找 EF Core 中两个列表之间的差异
- c# - 如何判断我的代码是否正在异步运行?