سؤال

أحاول تخطي INSERT في حالة معينة ، حيث تكون إحدى القيمتين المعنيتين قيمة محددة:

// this can work if Beech allready exists
INSERT IGNORE INTO my_table (col_wood_name, col_type)
VALUES ("Beech", 0)

// this should be skipped if Beech allready exists with col_type = 1
INSERT IGNORE INTO my_table (col_wood_name, col_type)
VALUES ("Beech", 1)

my_table:
id      col_wood_name     col_type       other_column_1     other_column_2     etc_cols
1       Beech             0              ...                ...                ...
2       Fir               0              ...                ...                ...
3       Beech             1              ...                ...                ...
4       Pine              1              ...                ...                ...
5       Beech             1 // here is my problem, how can I avoid to insert a tree if col_type == 1?
6       Beech             0 // it's ok because col_type == 0

كيف يمكنني تجنب إدخال اسم شجرة إذا col_type == 1?

أعلم أنه يمكنني إنشاء مفتاح فريد col_wood_name و col_type استخدام شيء مثل:

ALTER TABLE my_table ADD UNIQUE(col_wood_name, col_type);

ولكن هذا غير مكتمل لأن هذا يجب أن يعمل فقط إذا col_type هو 1, ، كيف يمكنني ان احلها؟

هل كانت مفيدة؟

المحلول

AFAIK ، لا توجد طريقة للقيام بذلك في استفسار واحد. استخدم الإجراءات المخزنة أو استعلام إضافي في التطبيق الخاص بك.

نصائح أخرى

كم عدد col_type مختلف ممكن؟

أسأل بسبب أسباب التصميم. إذا كان لديك فقط عمودين في الجدول ، فأنا لا أرى كيف سيكون من المفيد عدم القيام بالقيود الفريدة في الحقلين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top