
Originariamente inviato da
Phil_cattivocarattere
Ovvio! Chi è stato quel

che ha scritto

Originariamente inviato da
Phil_cattivocarattere
... qualcuno lo fermi.

Non era poi così
quello che ha scritto.
Accodandomi al suggerimento di +m+ (di cui però ho capito solo la parte strettamente SQL, il resto per me è materia sconosciuta), ti illustro il ragionamento da seguire, non sono ancora riuscito a metterlo in pratica al tuo caso concreto.
Procedi per passi, dopo li "unirai" il più possibile all'interno della stessa query.
1 = seleziona gli id_prodotti dalla tabella SC_PR_IN dove id_ingrediente è "olio" o "sale"
2 = seleziona gli id_prodotti dalla tabella TABELLA PRODOTTI che non hanno corrispondenza nella selezione di cui al punto 1. STOP
Man mano che scrivo non sembra così complicato. Ecco l'equivalente in query
1 =
SELECT DISTINCT id_prodotto FROM sc_pr_in WHERE id_ingrediente in (12, 13, ... e tutti gli altri codici ingrediente che cercando)
2 =
SELECT * FROM [tabella prodotti] WHERE [tabella prodotti].[id_prodotto] NOT IN (SELECT DISTINCT id_prodotto FROM sc_pr_in WHERE id_ingrediente IN (12, 13))
(grrrrr... tabelle con il nome con lo spazio)
Mi sono imbattuto in queste situazioni in un paio di forum proprio in questi giorni e sono giunto alla conclusione che vanno trattate "per differenza" (si cerca prima quello che corrisponde ai criteri che si vogliono escludere e si cercano poi per differenza quelli che restano).
E per fare questa differenza c'è anche la strada del LEFT JOIN, sì.
2 =
SELECT * FROM [tabella prodotti] AS T_left LEFT JOIN (SELECT DISTINCT id_prodotto FROM sc_pr_in WHERE id_ingrediente IN (12, 13)) AS T_right ON T_left.id_prodotto = T_right.id_prodotto WHERE T_right.id_prodotto IS NULL
e per valutare quale delle due soddifa esattamente le tue esigenze posso solo rinviarti al sito già suggerito: NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: SQL Server | EXPLAIN EXTENDED con le precisazioni già scritte all'inizio del thread