我不是SQL专家,这是我对表“查询”(键:SystemId,TopicId,DocumentId,所有也是外键)我的SQLite查询获取外键和插入避免重复。但它是巨大的,丑陋的,我要执行它上千次:如何优化这个庞大而丑陋的查询,忽略重复?
command.CommandText = "INSERT INTO Query (SystemId, TopicId, DocumentId) " +
"(SELECT Id FROM System WHERE Tag = @SystemTag COLLATE NOCASE), " +
"(SELECT Id FROM Topic WHERE Number = @TopicNumber COLLATE NOCASE), " +
"(SELECT Id FROM Document WHERE Number = @DocNumber COLLATE NOCASE) " +
"WHERE NOT EXISTS (SELECT 1 FROM Query WHERE " +
"SystemId = (SELECT Id FROM System WHERE Tag = @SystemTag) AND " +
"TopicId = (SELECT 1 FROM Topic WHERE Number = @TopicNumber) AND " +
"DocumentId = (SELECT Id FROM Document WHERE Number = @DocNumber))";
问题:没有办法告诉SQL“不用担心重复,忽略INSERT语句”。或者可能使用变量/临时表,AD语句?
编辑:直查询:
INSERT INTO Query (SystemId, TopicId, DocumentId)
(SELECT Id FROM System WHERE Tag = @SystemTag COLLATE NOCASE),
(SELECT Id FROM Topic WHERE Number = @TopicNumber COLLATE NOCASE),
(SELECT Id FROM Document WHERE Number = @DocNumber COLLATE NOCASE)
WHERE NOT EXISTS (SELECT 1 FROM Query WHERE
SystemId = (SELECT Id FROM System WHERE Tag = @SystemTag) AND
TopicId = (SELECT 1 FROM Topic WHERE Number = @TopicNumber) AND
DocumentId = (SELECT Id FROM Document WHERE Number = @DocNumber));
这在使用SELECT的INSERT中,我需要避免重复... – gremo 2010-12-03 10:05:18