sql - 如何使用不总是存在的列执行带有 WHERE 的选择
问题描述
简单的例子:我有一些(几乎)相同的个人数据表(年龄、姓名、体重......)
现在我有一个简单但很长的 SELECT 来查找丢失的数据:
Select ID
from personal_data_a
where
born is null
or age < 1
or weight > 500
or (name is 'John' and surname is 'Doe')
现在的问题是:我有一些个人数据表,其中“姓”列不存在,但我想对所有这些表使用相同的 SQL 语句。所以我必须检查(在 WHERE 子句中)最后一个 OR 条件仅用于“如果列姓氏存在”。
可以用简单的方式完成吗?
解决方案
你应该让所有人都在同一张桌子上。
如果由于某种原因您不能这样做,请考虑创建一个视图。像这样的东西:
CREATE OR REPLACE VIEW v_personal_data
AS
SELECT id,
born,
name,
surname,
age,
weight
FROM personal_data_a
UNION ALL
SELECT id,
born,
name,
NULL AS surname, --> this table doesn't contain surname
age,
weight
FROM personal_data_b;
接着
SELECT id
FROM v_personal_data
WHERE born IS NULL
OR age < 1
OR ( name = 'John'
AND ( surname = 'Doe'
OR surname IS NULL))
推荐阅读
- c - 创建一个函数以将数据输入到结构中
- cvxpy - 如何使 cvxpy 支持 3d 变量
- spring - 使用 Maven 命令行参数填充的 Spring 值
- javascript - 如何使用表单提交的标头(在 Web 应用程序中)将 JWT 发送回服务器?
- r - R中的线性函数轴缩放
- reactjs - 不断收到“不支持即时更改 onViewableItemsChanged”
- reactjs - Hook 不会被适当地嘲笑 Jest
- yosys - 在后端执行附加命令以获取要生成的文件
- ios - 为什么我的变量在我的 iOS 应用程序中转换为空?
- postgresql - 在 postgres 中解构数组