我有一个独特的专栏。我还有一组已知的元素,它们是该列的可能值。我需要知道哪些可能的值还没有出现在表中,因此适合插入。
对于SQL,这是可能的吗?还是需要后期处理?
目前,我使用" in“运算符来选择列值等于集合中的元素的所有行。然后我通过后期处理从我的集合中删除所有匹配的元素。
发布于 2012-10-04 01:18:44
将允许的值放在临时表allowed中,然后使用NOT IN使用子查询
SELECT *
FROM allowed
WHERE allowed.val NOT IN (
SELECT maintable.val
)一些DB将允许您“就地”构建一个表,而不必创建一个单独的表。例如,在PostgreSQL (任何版本)中:
SELECT *
FROM (
SELECT 'foo'
UNION ALL SELECT 'bar'
UNION ALL SELECT 'baz' -- etc.
) inplace_allowed
WHERE inplace_allowed.val NOT IN (
SELECT maintable.val
)更现代版本的PostgreSQL (也许还有其他do )将允许您使用稍微更好的VALUES语法来做同样的事情。
发布于 2012-10-04 01:18:01
要完全在SQL中实现这一点,您需要创建一个包含一列的单独的表。每行保存一组已知元素中的一个值。假设该表名为ElementList,另一个表名为Existing:
SELECT * FROM ElementList WHERE Element NOT IN
(SELECT DISTINCT Element FROM Existing)根据您使用的数据库引擎,您可以使用临时表来创建和保存列表,而无需将其永久保存在数据库中。但是,存储允许元素的列表对于约束现有表中的元素列(以及在用户界面中向用户呈现允许的元素)很有价值。
https://stackoverflow.com/questions/12713468
复制相似问题