سؤال
لدي الجداول الأساسية واحدة واثنين.دعونا ندعو لهم tbl1 و tbl2.
tbl1
---------
1 - apple |
2 - orange |
3 - banana |
4 - pineapple
tbl2
---------
1 - table |
2 - chair |
3 - sofa |
ثم هناك tbl3 الذي المفاتيح الخارجية التي تصل إلى كلا الجدولين أعلاه.
الجدول 3 شكل اثنين حدد الحقول:واحدة استعلامات tbl1 آخر استعلامات tbl2.جيد جدا حتى الآن.أنا الجمع بين العناصر من tbl1 و tbl2 في tbl3.
ثم لدي الحالة التالية:عندما يقوم المستخدمون الوفاء tbl3 أريد select2 (المقابلة البيانات من tbl2) إلى تحديث بعد أن المستخدم قد اختار عنصر من tbl1.من أجل ماذا ؟
دعنا نقول أنه للمرة الأولى الوفاء tbl3 المستخدم قد اختار "أبل" من tbl1 و "صوفا" من tbl2.عندما يقوم المستخدم اختيار "أبل" ، والثاني dropdownlist reloaded مع كل 3 عناصر من الخيارات.
ثانيا: الوقت المستخدم تحقق tbl3 شكل, إذا كان المستخدم يختار "أبل" مرة أخرى ، وقال انه سوف يكون الآن فقط 2 خيارات.أبل و أريكة تم انتقاؤها من قبل.الخيارات الآن فقط "الطاولة" و "كرسي".إذا كان يختار "أبل" و "الجدول" الآن تبقى الخيار الأول البند "أبل" سوف يكون "الرئيس".وهلم جرا...
لا أستطيع التفكير في SQL لتشغيل هذا الاستعلام الذي يستولي عناصر من tbl2.يجب استخدام العنصر المحدد من tbl1 و بطريقة ما الاستيلاء على البنود المتبقية ، تلك التي لا تتوافق مع ماخ.هذا هو استعلام SQL محتملة?أعتقد ذلك, ولكن لا يمكن التفكير في طريقة للخروج.
المحلول
وأنا على التخمين بأن table3 له أعمدة:
والمستخدم، Tbl1-ID، Tbl2-ID
وأنا على التخمين الذي تريده، للمستخدم X، قيم tbl2 على أساس selecton مصنوعة من tbl1 التي ليست في الجدول 3.
SELECT ID, Value
FROM tbl2
WHERE tbl2.ID NOT IN (
SELECT Tbl2-ID
FROM Table3
WHERE (User = <this user>) AND (Tbl1-ID = <selected tbl1 ID>)
)
نصائح أخرى
إذا كانت الروابط على أساس لكل مستخدم:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id
إذا كانت الروابط هي هي لكل مستخدم أساس:
SQL Server:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id AND t3.userid = @userId
أوراكل:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id AND t3.userid = :userId