Rispondi come da commenti sulla domanda. L'ho provato su un database SQLite e poiché la sintassi potrebbe essere disattivata rispetto a SQLServer, posso solo darti indicazioni. Non ho un collegamento a un database.
Trovare le basi:
- Trova la coppia mat_no, figlio in mat_rel dove il genitore È NULL
- Trova tutte le righe in mat_rel che corrispondono a mat_no e dove parent corrisponde al figlio da 1. Aggiungi l'SQL da 1. in un JOIN come (SELECT ..).
Trovare una mancata corrispondenza (confronto child=child e mat_no=mat_no):
- Trova tutte le righe da 2, dove non ci sono righe corrispondenti in mat_item. Usa un LEFT JOIN o NOT EXISTS
- Trova tutte le righe in mat_item dove non ci sono righe corrispondenti in mat_rel da 2. Usa RIGHT JOIN o NOT EXISTS.
Trovare sia 3 che 4:
- Utilizza entrambi gli SQL con UNION ALL