postgresql - 使用表 fieldname:possible_values 验证是否有其他表值并填充字段
问题描述
我有一组表,其中包含大部分字段的可能值。我想在每个表中创建一个字段,其中包含包含不接受值的列的列名。
下面是一个与我想做的相对应的试验场。
预期结果是:
Table foo
a | b | c | check
a | 1 | foobar |
b | 1 | foobaz |
ab | 1 | foofoo | a c
Table bar
a | x | y | check
a | foobar | 3 |
b | foobaz | 2 |
ab | foofoo | 2 | x
预定义的检查看起来像这样
table_name | field | permittedvalue
foo |a |a
foo |a |b
foo |b |NC
foo |c |foobar
foo |c |foobaz
bar |a |a
bar |a |b
bar |a |ab
bar |b |foo
bar |b |bar
bar |c |NC
我需要它在一个以 table_name 作为参数的函数中。
create table foo (
a character varying,
b int,
c character varying);
insert into foo values('a',1,'foobar');
insert into foo values('b',1,'foobaz');
insert into foo values('ab',2,'foofoo'); -- Not an accepted value in table check_foo
create table bar (
a character varying,
x character varying,
y int);
insert into bar values('a','foo',3);
insert into bar values('b','bar',2);
insert into bar values('ab','foobar',2);-- Not an accepted value in table check_foo
create table check_foo(tablename character varying,
field character varying,
permittedvalue character varying);
insert into check_foo values('foo','a','a');
insert into check_foo values('foo','a','b');
insert into check_foo values('foo','b','NC'); -- 'NC' means the column is not concerned so must not be validated
insert into check_foo values('foo','c','foobar');
insert into check_foo values('foo','c','foobaz');
insert into check_foo values('bar','a','a');
insert into check_foo values('bar','a','b');
insert into check_foo values('bar','a','ab');
insert into check_foo values('bar','b','foo');
insert into check_foo values('bar','b','bar');
insert into check_foo values('bar','c','NC');
解决方案
推荐阅读
- c# - 如何将 txt 文件转换为浮点数组(在 c# 中)?
- javascript - 表单集中添加的每个新输入元素的 Django 动态表单增量 ID
- c# - System.Windows.Forms.DateTimePicker 的文本拉伸过多
- bash - 使用正则表达式运算符将字符串与数组的内容进行匹配不起作用
- jenkins - 禁用在 Jenkins 管道日志中显示“[Pipeline]*”行?
- java - 将java转换为Json时是否可以忽略内部类名和变量
- c# - 如何使用c#检查日期时间是否为空
- angular - 重新加载页面将我带到角度 cli 中的根路径
- c++ - 您如何转发声明存在于命名空间中的类?
- android - Android 在 aws s3 http 上上传