It seems to work, but I've arrived here by reading up plus some trial and error. There seems to be several way of doing this (from reading up) so I am wondering if my rule is efficient and whether I need some sort of flag at the end, eg: [NC,L,QSA].
Aren't you going around in circles? By default, a rewrite or redirect keeps the original query string unless you either replace it with a new one, or end the target in ? meaning "remove the query string". So if you say nothing at all, the original query string will carry over unchanged.
This boils down to "There was no query string in the original request", so now I'm confused. Are you trying to keep a query, or add one? There shouldn't be two separate RewriteRules covering the same request.
I think it will work out better if you backtrack and simply explain in English what you're trying to do.