שלח תשובה

זירת השאלות

703
צפיות
4
תשובות

שאלה ב SQL

,‏ 20 בפברואר, 2008

יש לי שאלון אמריקאי באתר אשר מתחלק לשתי טבלאות, טבלת שאלות וטבלת תשובות
Questions, Answers
בטבלת Questions יש רשימה ממוספרת אחידה של שאלות עליהן צריך לענות כל גולש באתר.
בטבלת Answers יש רשימה של תשובות שנענו, זו טבלה עם 3 שדות:
1. ClientID – מספר הגולש
2. QuestionID – מספר המקשר למספר השאלה מטבלת Questions
3. Answer – התשובה אותה ענה הגולש.

הבעיה צצה כשרציתי להציג לגולש ספציפי את השאלות עליהן הוא  לא ענה…

אני מבין שאני צריך להשתמש ב JOIN, אבל אין מנוס משאילתה מקוננת לפני כן
כלומר, צריך ליצור שאילתה שתשלוף לי את כלל התשובות שענה הגולש הצפציפי ורק לאחר מכן לעשות JOIN עם טבלת השאלות כדי לשלוף מתוכה את השאלות שעדיין לא ענה אותו גולש ספציפי.

האם יש כאן מישהו שיודע את התחביר לשאילתה שכזו?
ניסיתי כל מיני כאלה:
SELECT * FROM Questions LEFT JOIN (SELECT * FROM Answers WHERE Answers.ClientID ='11111111') ON Questions.QuestionID = Answers.QuestionID WHERE Answers.Answer IS NULL

וזה כמובן קוד לא קביל,
אנא מכם, אני כבר חורש שלושה ימים בניסיונות למצוא פתרון לבעיה הזו…
על הפותר תבוא הברכה!

תגיות:

4 תשובות

  1. מה רע בשאילתה כזו:


    SELECT *
    FROM Questions
        LEFT JOIN  Answers ON Questions.QuestionID = Answers.QuestionID AND  Answers.ClientID ='1
    WHERE Answers.Answer IS NULL

  2. shukibarkan הגיב:

    כל הכבוד ענבל, אבל…
    זה קוד השגיאה שאני מקבל…

    Microsoft JET Database Engine error '80040e14'

    Join expression not supported.
    —————————————

    לדעתי הבעיה היא שבשימוש ב JOIN אסור להשתמש ב AND באזור ה ON של השאילתה.

    אולי אפשט את שאלתי:
    איך ניתן להריץ שאילתה על שאילתה בלי להשתמש בשאילתות אקסס?

    באקסס יצרתי שאילתה אחת שדלתה את כל השאלות שענה עליהן משתמש מסויים, לאחר מכן הרצתי על השאילתה הזו שאילתה שהצליבה בין השאלות לתשובות מהשאילתה הראשונה – והצלחתי.
    אבל אני לא יכול להשתמש בשאילתות של האקסס כי הן לא מקבלות מספר משתמש משתנה…
    איך המבנה של שאילתות מקוננות שאחת מהן מכילה JOIN ?

    אבל באמת סחטיין לשניכם על ההתעמקות בצרות של אחרים. התחושה הזו שמישהו מנסה להיכנס לבעיה שלך ואפילו להציע פתרון – ממלאת אותי באופטימיות. בחיי.

  3. באקסס זה LEFT OUTER JOIN
    ו-


    isNull(fld)

    במקום


    fld is null

שלח תשובה