Importuje dane do tabeli tymczasowej tmp mam 21 wierszy, potem chce je powrzucać do odpowiednich

tabel przy jednej mam problem
Przy zapytaniu

SELECT (SELECT idsklepu FROM sklep WHERE Nazwa=sklep),
(SELECT idproduktu FROM produkty WHERE Nazwa=tmp.Produkty), Ilosc, OdKiedy, DoKiedy 
FROM tmp

otrzymuję

#1242 - Subquery returns more than 1 row

przy zapytaniu

SELECT Sklep.idsklepu,Produkty.idproduktu,ilosc,Odkiedy,dokiedy 
from tmp
join Sklep on Sklep.nazwa=tmp.sklep
join Produkty on produkty.nazwa=tmp.produkty

dublują mi się wyniki i wychodzi dziwny wynik wychodza 37 wierszy.. o co chodzi
natomiast przy zapytaniu

INSERT INTO sprzedaz(idsklepu, idproduktu, ilosc, OdKiedy, DoKiedy)
SELECT DISTINCT Sklep.nazwa,Produkty.idproduktu,ilosc,Odkiedy,dokiedy 
from tmp
join Sklep on Sklep.nazwa=tmp.sklep
join Produkty on produkty.nazwa=tmp.produkty

wychodzą poprawnie dane ,ale chcialbym id sklepu... i niem wiem czemu muszę stosować DISTINCT w id

sklepu wstawia mi z automatu 0 jak wyciągnąć id?

Zauważyłem że nie zawsze jest poprawnie.Tabela sklep wyglada idsklepu,nazwa,idklienta

*1;;1
*2;;3
*3;;12

nawet jak zrobie takie zapytanie

SELECT sklep.idsklepu
from tmp
LEFT JOIN sklep ON
tmp.Sklep=sklep.nazwa

to pokazuje się dużo zapytań tak jakby każdy z każdym się łączył..
Można to jakoś naprawić, rozwiązać?