>>>>> Simon Slavin writes:
>>>>> On 2 Nov 2012, at 8:58am, Ivan Shmakov wrote:
>> INSERT OR IGNORE INTO "foo" ("foo")
>> VALUES (?1);
>> INSERT INTO "bar" ("foo")
>> VALUES ((SELECT f."rowid" FROM "foo" f WHERE f."foo" = ?1));
>> Or is there a better way to ensure that the inner SELECT either
>> returns a single row, or fails?
> What do you mean by 'fails'? Returning zero rows from a SELECT is
> not failure: it's successfully reporting that there are no such rows
> in the table.
Which, as long as the task below is considered, indicates a
“contradiction” (of a kind.)
> And there may be rows in the table even if the first INSERT failed:
> the rows may have already been inserted.
Yes.
The end result for the command sequence I'm looking for is
simple:
• "foo" has a (foo → ?1) record — it doesn't matter if it was
INSERT'ed just now, or was added at some point before;
• "bar" has a (foo → id) record, where ‘id’ is the ROWID of the
aforementioned "foo" record.
AIUI, the command sequence above does just that.
> If what you mean is that some syntax error or conflict prevented the
> first INSERT from working, the correct way to do it is to look at the
> result returned from that INSERT and see whether it is SQLITE_OK.
ACK, thanks. However, I'm not really interested in the result
of the first INSERT, and, in this case, these commands may
actually be a part of a trigger (where, I believe, I cannot look
at the result returned all that easily.)
[…]
--
FSF associate member #7257
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users