آیا هنوز گیر کردهاید؟
چه کاری انجام دهید وقتی پرسوجوی شما یک پیام خطا برمیگرداند.
عیبیابی خطاهای نحو SQL
چه کاری انجام دهید وقتی پرسوجوی شما یک پیام خطا برمیگرداند.
خواندن یک پیام خطا نباید مثل حل یک معما احساس شود. این راهنمای عیبیابی توضیح میدهد چه کاری میتوانید درباره پرسوجوهای سرسخت که از اجرا امتناع میکنند انجام دهید.
عیبیابی یک پرسوجوی SQL
اگر پرسوجوی SQL شما شامل متغیرهای SQL است که شبیه {{ variable }} به نظر میرسند، ابتدا به عیبیابی متغیرهای SQL بروید.
- به خطی که در پرسوجوی SQL شما ناموفق است بروید.
- نحو SQL را روی خطی که در پرسوجوی SQL شما ناموفق است بررسی کنید.
- منطق پرسوجو خود را بررسی کنید اگر پرسوجو از joinها، زیرپرسوجوها، یا CTEها استفاده میکند.
- اگر یک پیام خطا دریافت میکنید که خاص پرسوجوی SQL شما نیست، به عیبیابی پیامهای خطا بروید.
نیاز به یادآوری سریع قبل از ورود به SQL پیشرفته دارید؟ برگه تقلب SQL ما را برای دستورات و نحو اصلی بررسی کنید. همچنین برای به اشتراک گذاشتن با همکارانی که تازه در تحلیل داده شروع کردهاند عالی است.
عیبیابی SQL چگونه کار میکند؟
- پیامهای خطای SQL برای هر خط در پرسوجوی شما که اجرا نمیشود نمایش داده میشوند. باید مراحل بالا را برای هر خطی که ناموفق بود دنبال کنید.
- اگر هر تغییری در یک خط ایجاد کردید، پرسوجوی خود را اجرا کنید تا بررسی کنید آیا مشکل برطرف شده است قبل از رفتن به مرحله بعد. میتوانید یک بند
LIMITدر انتهای پرسوجوی خود اضافه کنید تا فرآیند را سرعت بخشید. - توجه داشته باشید که پرسوجوهای SQL از بالا به پایین اجرا نمیشوند، پس خطوط پرسوجوی خود را به ترتیبی که نوشته شدهاند عیبیابی نمیکنید. پیامهای خطا را دنبال کنید تا به شما کمک کند خطوطی که نیاز به توجه دارند را پیدا کنید.
عیبیابی نحو SQL
- املای خطی که در پرسوجوی SQL شما ناموفق است را مرور کنید.
- برای براکتها یا کاماهای گمشده روی خطی که در پرسوجوی SQL شما ناموفق است مرور کنید.
- خطوط کامنت شده (خطوطی که با
--یا/*شروع میشوند) را حذف کنید. - برای خطاهای نحو رایج که خاص گویش SQL شما هستند مرور کنید.
توضیح
پایگاه داده شما باید بتواند پرسوجوی شما را "بخواند" تا آن را اجرا کند.
- املای صحیح به پایگاه داده شما دقیقاً چه چیزی را جستجو کند میگوید.
- نقطهگذاری به پایگاه داده شما چگونه (مثلاً چه ترتیبی استفاده کند) داده شما را جستجو کند میگوید.
- کامنتها برای خواندن یا اجرا شدن در نظر گرفته نشدهاند، اما گاهی اوقات فاصلههای خالی یا نمادهای دنبالهدار میتوانند به طور غیرمنتظره با خواندن و اجرای خطوط مجاور تداخل کنند.
راهنماهای مرجع SQL رایج
قبل از شروع، راهنمای مرجع SQL برای گویش SQL که استفاده میکنید را باز کنید. ما به برخی از رایجترینها در اینجا لینک دادهایم:
- MySQL
- PostgreSQL
- Microsoft SQL Server
- Amazon Redshift
- Google BigQuery
- Snowflake
- نمیدانم کدام گویش SQL استفاده کنم.
خطاهای رایج نحو SQL
پیام خطای شما چه میگوید؟
نام ستون یا جدول "پیدا نشد" یا "شناخته نشد"
اگر پرسوجوی SQL شما شامل متغیرهای SQL است که شبیه {{ variable }} به نظر میرسند، ابتدا به عیبیابی متغیرهای SQL بروید.
مراحل
SELECT 'column_name'SELECT "column_name"SELECTcolumn_name``- آیا از علامتهای نقل قول صحیح استفاده میکنید؟ به عنوان مثال:
FROM table_nameFROM schema_name.table_nameFROM database_name.schema_name.table_name- آیا از مسیر صحیح به ستونها و جداول استفاده میکنید؟ به عنوان مثال:
SELECT usersخطا میدهد.SELECT "users"به درستی اجرا میشود.- آیا نام ستون شما یک کلمه رزرو شده است؟ به عنوان مثال: در PostgresSQL، 'users' یک کلمه کلیدی رزرو شده است.
- یک سؤال در query builder با استفاده از همان ستونها و جداول سؤال SQL خود ایجاد کنید.
- سؤال را به SQL تبدیل کنید.
- نحوه ارجاع پرسوجوی SQL تولید شده توسط متابیس به نام ستون و جدول را ببینید.
- نکته: از متابیس برای بررسی نحو نام ستون و جدول استفاده کنید
- بخش ساختار راهنمای مرجع را برای گویش SQL خود مرور کنید.
SELECT * FROM your_table_name LIMIT 10;را اجرا کنید تا به دنبال نام ستون یا جدول برای استفاده در پرسوجوی خود بگردید.- اگر شما یک مدیر متابیس هستید، صفحه Data model را برای schema اصلی بررسی کنید.
- اگر نام ستون یا جدول در مرجع داده وجود ندارد:
- از مدیر متابیس خود بپرسید آیا ستون در سمت پایگاه داده تغییر نام داده یا حذف شده است.
- اگر شما یک مدیر متابیس هستید، ممکن است نیاز به اجرای یک sync برای بهروزرسانی داده خود داشته باشید.
- اگر نام ستون وجود دارد، اما نمیتوانید ستون را از ویرایشگر SQL پرسوجو کنید:
- مرجع داده را برای نام ستونها و جداول در پرسوجوی خود مرور کنید.
توضیح
باید مطمئن شوید که از نحو صحیح برای گویش SQL استفاده شده توسط پایگاه داده خود استفاده میکنید.
پرسوجوی شما همچنین باید از نام ستون و جدول که با نامهای اصلی در پایگاه داده شما مطابقت دارند استفاده کند. متابیس از نامهای نمایش استفاده میکند که میتوانند توسط مدیر متابیس شما بهروزرسانی شوند، پس مرجع داده ممکن است با schema پایگاه داده شما مطابقت نداشته باشد. همچنین ممکن است یک ستون یا جدول در سمت پایگاه داده تغییر نام داده شده باشد، اما متابیس sync را برای دریافت بهروزرسانیها اجرا نکرده است.
مطالعه بیشتر
تابع SQL وجود ندارد
اگر پرسوجوی SQL شما شامل متغیرهای SQL است که شبیه {{ variable }} به نظر میرسند، ابتدا به عیبیابی متغیرهای SQL بروید.
مراحل
- میتوانید از مرجع داده متابیس برای مرور نوع فیلد ستون (به عنوان یک پروکسی برای نوع داده) استفاده کنید.
- همچنین میتوانید مستقیماً information schema را در پایگاه داده خود پرسوجو کنید اگر مجوز دسترسی به آن را دارید.
- نوع داده ستونی که میخواهید تابع شما روی آن اعمال شود را مرور کنید.
- تأیید کنید که تابع برای گویش SQL شما وجود دارد.
- نوع(های) داده پذیرفته شده توسط تابع خود را مرور کنید.
- بخش تابع راهنمای مرجع را برای گویش SQL خود مرور کنید.
- ستون خود را به نوع داده صحیح در پرسوجوی SQL خود cast کنید.
- اگر شما یک مدیر متابیس هستید، همچنین میتوانید انواع داده را از صفحه Table metadata cast کنید.
- اگر نوع فیلد ستون شما با نوع داده مورد انتظار تابع شما مطابقت ندارد:
توضیح
توابع SQL برای کار روی انواع داده خاص در پایگاه داده شما طراحی شدهاند. به عنوان مثال، تابع DATE_TRUNC در PostgresSQL روی ستونهایی با داده تایپ شده date، timestamp، و time در یک پایگاه داده Postgres کار میکند. اگر سعی کنید از تابع DATE_TRUNC روی یک ستون با نوع داده string در پایگاه داده خود استفاده کنید، کار نمیکند.
توجه داشته باشید که انواع فیلد متابیس یک به یک با انواع داده در پایگاه داده شما نیستند. در این مورد، نوع فیلد اطلاعات کافی درباره نوع داده ستون برای عیبیابی خطا به شما میدهد.
مطالعه بیشتر
نحوه یافتن خط ناموفق در یک پرسوجوی SQL
اگر پرسوجوی SQL شما شامل متغیرهای SQL است که شبیه {{ variable }} به نظر میرسند، ابتدا به عیبیابی متغیرهای SQL بروید.
پس از یافتن خطی که در پرسوجوی SQL شما ناموفق است، به مراحل در عیبیابی یک پرسوجوی SQL بروید.
خواندن پیام خطای SQL شما
آیا پیام خطای شما:
- خط یا موقعیت کاراکتر را به شما میگوید؟
- شامل یک نام جدول یا ستون است؟ اگر نام جدول یا ستون بیش از یک بار در پرسوجوی شما ظاهر میشود، اندازه پرسوجوی خود را کاهش دهید.
- به یک بند SQL اشاره میکند؟
کاهش اندازه یک پرسوجوی SQL
اگر پرسوجوی شما از:
- زیرپرسوجوها (پرسوجوهای تودرتو) استفاده میکند، هر زیرپرسوجو را به طور جداگانه اجرا کنید. با زیرپرسوجوهای داخلی شروع کنید و به سمت بیرون کار کنید.
- CTEها استفاده میکند، هر CTE را به طور جداگانه اجرا کنید. با CTE پایه خود شروع کنید و به سمت پایین پرسوجو کار کنید.
- متغیرهای SQL که به مدلهای متابیس اشاره میکنند استفاده میکند، هر مدل را به طور جداگانه اجرا کنید. با باز کردن پنل متغیرها به مدل بروید، یا شماره ID مدل را از متغیر در نوار جستجوی متابیس وارد کنید.
- به خاطر داشته باشید پیام خطای SQL را بخوانید همانطور که سعی میکنید مشکل را جدا کنید. برای اطلاعات بیشتر، به عیبیابی SQL چگونه کار میکند؟ بروید.
نکات برای کار در ویرایشگر SQL
خطوط پرسوجوی SQL خود را برجسته کنید تا:
- خطوط را با
Cmd + ReturnیاCtrl + Enterاجرا کنید. - خطوط را با
Cmd + /یاCtrl + /کامنت/کامنتزدایی کنید.
نحوه فهمیدن کدام گویش SQL استفاده کنیم
گویش SQL بر اساس پایگاه داده که جداولی که میخواهید پرسوجو کنید را ذخیره میکند است. پس از فهمیدن کدام گویش SQL استفاده کنید، میتوانید مراحل در عیبیابی یک پرسوجوی SQL را دنبال کنید.
برای فهمیدن کدام پایگاه داده پرسوجو میکنید:
- اگر شما یک مدیر متابیس هستید، به Admin settings > Databases بروید و در ستون Engine نگاه کنید.
- در غیر این صورت، از شخصی که متابیس شما را راهاندازی کرده بپرسید.
آیا مشکل متفاوتی دارید؟
- نتایج پرسوجوی من ردیفهای تکراری دارند.
- نتایج پرسوجوی من ردیفهای گمشده دارند.
- تجمیعهای من (شمارشها، مجموعها و غیره) اشتباه هستند.
- نتایج پرسوجوی من اشتباه هستند.
- تاریخها و زمانهای من اشتباه هستند.
- داده من بهروز نیست.
- یک پیام خطا دارم که خاص پرسوجو یا نحو SQL من نیست.
آیا هنوز گیر کردهاید؟
جستجو کنید یا از جامعه متابیس بپرسید.