Καλησπέρα σας,
έχω 2 κλασικούς πίνακες (έστω παραστατικών).
Στον 1ο αποθηκεύω την «κεφαλή» του παραστατικού και στον 2ο τις λεπτομέρειές του (αντικείμενα) με foreign key το id του πρώτου πίνακα.
Έστω τώρα ότι διαγράφω το παραστατικό οπότε πάω στον πρώτο πίνακα και θέτω το πεδίο isDeleted = 1.
Στον δεύτερο πίνακα δεν έχω παρόμοιο πεδίο ώστε να πω και στις γραμμές του isDeleted = 1 και αυτό γιατί πάντα στα queries μου θα κοιτάω αν η κεφαλή είναι IsDeleted για να προχωρήσω ανάλογα.
Βρήκα όμως μια περίπτωση όπου κάνω πρώτα left join στον δεύτερο πίνακα (κρατάω και στοιχεία για κάτι άλλο πέρα από τις γραμμές του παραστατικού) και μετά Join με τον 1ο ώστε να ελέγξω εάν είναι διεγραμμένο.
Π.χ.
σε κάποια ερωτήματα πάω πρώτα από τον πίνακα 1 (Timologia)
SELECT bl.Barcode
FROM Timologia as t
INNER JOIN Timologio_Deltia as td
ON t.id = td.timologioId
INNER JOIN DeltiaAgoras as dag
ON td.deltioAgorasID = dag.id and dag.isdeleted=0
INNER JOIN BCLog as bl ON dag.id = bl.deltio_agoras_id
Where t.isDeleted = 0
..... , οπότε εδώ είμαι οκ.
Σε περίπτωση που πάω από την ανάποδη όμως,
SELECT bl.Barcode
FROM DeltiaAgoras as dag
LEFT JOIN Timologio_Deltia as td
ON dag.id = td.deltioAgorasID and (select t2.isdeleted from timologia as t2 where t2.id =td.timologioId)=0
LEFT JOIN Timologia as t
ON td.timologioId = t.id and t.isdeleted = 0
LEFT JOIN BCLog as bl ON bl.deltio_agoras_id = dag.id
...
εάν δεν βάλω την υπογραμμισμένη συνθήκη παίρνω πολλαπλές εγγραφές γιατί πάει πρώτα στον 2ο πίνακα οπότε και join-άρει και με εγγραφές που ανήκουν σε διαγραμμένα παραστατικά.
Και ρωτάω, για να μη μακρολογώ. Μήπως είναι καλύτερα και πιο σωστά γενικά, να βάλω απλά ενα πεδίο Isdeleted και στον 2ο πίνακα ή το αφήνω έτσι καλύτερα;
Ευχαριστώ πολύ