Saya menghadapi masalah dengan pernyataan SELECT menggunakan berbilang cantuman dalam. Kod saya adalah seperti berikut:
SELECT `movies02`.`id`, `movies02`.`title`, `movies03`.`talent`, `movies07`.`character`, `movies05`.`genre` FROM `movies02` INNER JOIN `movies07` ON `movies07`.`movie` = `movies02`.`id` INNER JOIN `movies03` ON `movies03`.`id` = `movies07`.`performer` INNER JOIN `movies08` ON `movies08`.`genre` = `movies05`.`id` INNER JOIN `movies02` ON `movies08`.`movie` = `movies02`.`id`;
Menggunakan INNER JOIN untuk mendapatkan pelakon dalam filem dan peranan yang mereka mainkan nampaknya berkesan, tetapi dua gabungan terakhir untuk mendapatkan jenis filem tidak berfungsi, jadi saya fikir saya boleh menulisnya dalam paparan dan kemudian menggabungkannya apabila mengeluarkan hasilnya berdiri. Jadi saya berakhir dengan tiga pandangan. Satu untuk mendapatkan genre, pelakon dan peranan, dan kemudian satu untuk menyusun segala-galanya. Persoalannya, adakah ini lebih baik daripada menggunakan satu pernyataan SELECT yang besar dan berbilang sambungan?
Saya cuba menulis semula pertanyaan beberapa kali dan mencubanya dalam pelbagai cara
Apabila anda melaksanakan pertanyaan yang melibatkan paparan, perancang pertanyaan MySQL/MariaDB menggabungkan semua pandangan dan pertanyaan utama ke dalam satu pertanyaan sebelum menentukan cara untuk mengakses jadual. Oleh itu, prestasi pada dasarnya adalah sama apabila menggunakan paparan, ungkapan biasa dan/atau subkueri.
Namun, pandangan ialah cara yang berguna untuk merangkum beberapa kerumitan pertanyaan.
Selain itu, anda boleh memberikan akses kepada paparan kepada subset pengguna yang dipercayai tanpa memberikan mereka akses kepada jadual asas.
Kelemahan paparan adalah sama seperti meletakkan sebarang logik aplikasi ke dalam sistem pengurusan pangkalan data dan bukannya aplikasi: kemas kini lebih rumit dan lebih mudah dilupakan untuk dikemas kini. (Soalan ini tidak berkaitan jika anda mempunyai aliran kerja kemas kini aplikasi yang boleh dipercayai yang mengemas kini paparan, fungsi tersimpan dan prosedur tersimpan apabila kod aplikasi dikemas kini.)
Maksudnya, cara yang baik untuk menulis jenis pertanyaan ini adalah dengan bermula dengan jadual yang mengandungi entiti "peringkat atas". Dalam kes anda, saya fikir ia adalah filem. Kemudian gunakan LEFT JOIN untuk menyertai jadual lain dan bukannya menggunakan INNER JOIN. Dengan cara ini, walaupun beberapa sub-entiti (pelakon, genre, dll.) tiada, anda masih boleh melihat filem itu dalam hasil carian.
Petua pro: Jika anda boleh, namakan jadual untuk entiti yang mengandungi (filem, genre, pelakon, dll.) dan bukannya menggunakan nama seperti
whatever01
、whatever02
. Adalah penting untuk dapat melihat pertanyaan dan membuat alasan mengenainya, dan nama jadual boleh memudahkan perkara ini.