postgresql 中是否有任何技巧可以使值匹配每个可能的值,一种“Catch all”值,一种反 NULL ?
现在,我最好的想法是选择一个“catchall”关键字并在我的查询中强制匹配。
WITH cities AS (SELECT * FROM (VALUES('USA','New York'),
('USA','San Francisco'),
('Canada','Toronto'),
('Canada','Quebec')
)x(country,city)),
zones AS (SELECT * FROM (VALUES('USA East','USA','New York'),
('USA West','USA','San Francisco'),
('Canada','Canada','catchall')
)x(zone,country,city))
SELECT z.zone, c.country, c.city
FROM cities c,zones z
WHERE c.country=z.country
AND z.city IN (c.city,'catchall');
zone | country | city
----------+---------+---------------
USA East | USA | New York
USA West | USA | San Francisco
Canada | Canada | Toronto
Canada | Canada | Quebec
如果在“城市”表中插入一个新的加拿大城镇,“区域”表将自动将其识别为“加拿大”区域的一部分。上面的查询满足了我正在寻找的功能,但是如果在一个广泛的数据库中重复多次,它会感觉很尴尬并且容易出错。
这是正确的方法吗,有没有更好的方法,还是我问错了问题?
非常感谢你的回答!