Apabila bekerja dengan pertanyaan pangkalan data, anda mungkin menghadapi ralat 1066, yang menunjukkan jadual atau alias bukan unik. Ini biasanya timbul apabila menyertai jadual yang sama berbilang kali tanpa menyatakan alias yang sesuai.
Pertimbangkan senario berikut: Anda mempunyai jadual artikel dengan lajur seperti author_id dan modified_by baris rujukan tersebut dalam jadual pengguna. Pertanyaan SQL anda bertujuan untuk mengambil data daripada jadual artikel dan mendapatkan maklumat tentang pengarang dan pengguna yang terakhir mengubah suai artikel. Walau bagaimanapun, apabila anda melaksanakan pertanyaan, anda menerima ralat:
#1066 - Not unique table/alias: 'user'
Mesej ralat ini menandakan bahawa jadual pengguna telah disertai beberapa kali dalam pertanyaan tanpa diberi alias unik.
Apabila anda menyertai jadual yang sama beberapa kali, pangkalan data perlu membezakan antara contoh berbeza jadual itu. Untuk mencapai ini, anda mesti menetapkan alias unik untuk setiap kejadian. Ini amat penting apabila anda mendapatkan semula lajur daripada berbilang kejadian gabungan, seperti yang anda lakukan dalam pertanyaan anda:
SELECT article.*, section.title, category.title, user.name, user.name FROM article INNER JOIN section ON article.section_id = section.id INNER JOIN category ON article.category_id = category.id INNER JOIN user ON article.author_id = user.id LEFT JOIN user ON article.modified_by = user.id WHERE article.id = '1'
Perhatikan bahawa anda menggunakan pengguna alias dua kali tanpa membezakan antara dua kejadian jadual. Ini mengelirukan pangkalan data dan membawa kepada ralat "Not unique table/alias".
Untuk menyelesaikan isu ini, anda perlu memberikan jadual pengguna alias apabila anda menyertainya untuk kali kedua. Ini akan membezakan antara kedua-dua kejadian dan membolehkan pertanyaan dilaksanakan dengan jayanya.
Begini cara anda boleh mengubah suai kod anda untuk membetulkan ralat:
SELECT article.*, section.title, category.title, user.name, u2.name FROM article INNER JOIN section ON article.section_id = section.id INNER JOIN category ON article.category_id = category.id INNER JOIN user ON article.author_id = user.id LEFT JOIN user u2 ON article.modified_by = u2.id WHERE article.id = '1'
Dalam pertanyaan yang dikemas kini ini, yang kedua contoh jadual pengguna diberi alias u2. Ini membolehkan pangkalan data membezakan antara kedua-dua kejadian dan menyelesaikan ralat.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat SQL 1066: 'Bukan jadual/alias unik: 'pengguna''?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!