שלח תשובה

זירת השאלות

596
צפיות
20
תשובות

שבת שלום, שאלה בקשר ל-SQL

,‏ 17 בינואר, 2004

יש לי טבלת זמרים שכבר ברור שיש שם ID של זמר ו NAME של זמר.
יש לי דף ASP בממשק ניהול ששם אני בוחר את הזמר מהרשימה ורושם קורות חיים שלו.

השאלה שלי פשוטה והיא:
איזה שאילתא אני רושם כדי שבטיבת בחירה יהיו רשימת זמרים שעוד לא עשיתי להם קורות חיים בכלל.

זה בטח משהו אם INNER JOIN כי זה שימוש ב-2 טבלאות.
אני צריך להבין רק את השאילתא שבודקת בטבלת קורות חיים אם קיים שם כבר קורות חיים של זמר, אם כן אז לטיבת בחירה לא תכנס שם של זמר אחרת כן.

תודה ושבת שלום

תגיות:

20 תשובות

  1. זהר פלד הגיב:

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

  2. mrmistory הגיב:

    זה בשפה פשוטה אבל אני ינשה שוב…
    יש לי 2 טבלאות.
    1) שמות זמרים שקיימים במערכת.
    2) קורות חיים של זמרים הקיימים במערכת.

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

    מה שאני צריך זה שאילתא שתיתן לי תוצאה כשאת: רק שמות הזמרים שאין להם קורות חיים.
    זאת אומרת שתיקח מטבלת "זמרים" שם זמר ותבדוק אותו בטבלת "קורות חיים" אם אין לזמר הזה קורות חיים אז לתת לי את התוצאה.

    דוגמא לטבלת זמרים:
    -אבי
    -דורון
    -תומי
    -בנצי
    -אדיר
    -ציון

    טבלת קורות חיים:
    -אבי
    -תומי
    אדיר

    התוצאה של שאילתא צריכה במקרה הזה לתת לי 3 תוצאות כי לזמרים
    דורון,בנצי,ציון אין קורות חיים במערכת.

    אם משהו לא מובן על ידי "ציור" שכבר עשיתי אני ינסה שוב.

    תודה שוב על העזרה.

  3. ככה


    SELECT *
    FROM Singers
    WHERE Id NOT IN (SELECT SingerId FROM CV)

  4. mrmistory הגיב:

    תודה רבה,זה עבד. טוב שיש מבינה פה.

  5. זהר פלד הגיב:

    שאלת על שתי טבלאות, אבל פירטת רק 1.
    זה מה שגרם לשאלה שלך להיות בלתי אפשרית למענה.

  6. mrmistory הגיב:

    פויייייי, לרגע חשבתי אחרת…
    זה כבר טוב, כי רציתי לצייר איכשהו 🙂
    סתם צוחק.
    יום טוב.

  7. ניר טייב הגיב:

    שמע פשוט מאוד
    שים עמודה בשם status ובדוק אם יש את הערך 0 אז סימן שאין לזמר ביוגרפייה ואם יש את הערך 1 אז סימן שיש לו ביוגרפיה…
    מובן???

  8. ניר טייב הגיב:

    טוב…
    לא שמתי לב שילדה בלבן ענתה לך…

  9. mrmistory הגיב:

    ובהרבה הרבה הרבה יעיל והכי …..
    חשוב שהיא ענתה נכון ואתה לא.
    תודה בכל זאת על נסיון לעזור, נראה לי שלמדת גם משהו מתשובה שלה 🙂

  10. זהר פלד הגיב:

    קודם כל, שתי התשובות שקיבלת נכונות,
    למרות שהתשובה של הילדה בלבן טובה יותר, גם היא לא היעילה ביותר האפשרית.

    הדרך הנכונה לעשות דבר כזה היא בעזרת join, ולא בעזרת שאילתה מקוננת:

    SELECT strSingerName
    FROM singersTBL, cvTBL
    WHERE singersTBL.intSingerId = cvTBL.intSingerId
    AND cvTBL.strSingerCv IS NULL

    הבהרות:
    א) את שמות הטבלאות והשדות אני מניח שאתה מבין, אם תצטרך הסבר, פשוט תשאל.

    ב) לכל מסד נתונים יש את הסטיות שלו מהתקן הכללי של SQL – יכול מאוד להיות ש IS NULL תצטרך לכתוב אחרת, לדוגמא.

    ג) כמובן, צריך לאפשר NULL בעמודה של strSingerCv.

    ד) שליפה של * היא השליפה הכי לא יעילה שיש – גם כשאתה צריך לשלוף את כל השדות בטבלה, תמיד יהיה יעיל יותר לשלוף בעזרת שמות ספציפיים, ועל אחת כמה וכמה כשאתה צריך רק חלק מהשדות.

  11. mrmistory הגיב:

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

  12. זהר פלד הגיב:

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

  13. ניר טייב הגיב:

    לא ממש הבנתי…
    את החלק האחרון של השאילתה שילדה בלבן הביאה???

  14. mrmistory הגיב:

    זה אומררררר…..
    תן לי את כל מטבלה 1 שאין אותם בטבלה 2

    דוגמא לטבלת זמרים:
    -אבי
    -דורון
    -תומי
    -בנצי
    -אדיר
    -ציון

    טבלת קורות חיים:
    -אבי
    -תומי
    אדיר

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

שלח תשובה