596
צפיות
צפיות
20
תשובות
תשובות
שבת שלום, שאלה בקשר ל-SQL
יש לי טבלת זמרים שכבר ברור שיש שם ID של זמר ו NAME של זמר.
יש לי דף ASP בממשק ניהול ששם אני בוחר את הזמר מהרשימה ורושם קורות חיים שלו.
השאלה שלי פשוטה והיא:
איזה שאילתא אני רושם כדי שבטיבת בחירה יהיו רשימת זמרים שעוד לא עשיתי להם קורות חיים בכלל.
זה בטח משהו אם INNER JOIN כי זה שימוש ב-2 טבלאות.
אני צריך להבין רק את השאילתא שבודקת בטבלת קורות חיים אם קיים שם כבר קורות חיים של זמר, אם כן אז לטיבת בחירה לא תכנס שם של זמר אחרת כן.
תודה ושבת שלום
20 תשובות
תקרא טוב טוב את השאלה שלך,
ואולי תצליח לנסח אותה בצורה כזו שגם אפשר יהיה לענות עליה.
זה בשפה פשוטה אבל אני ינשה שוב…
יש לי 2 טבלאות.
1) שמות זמרים שקיימים במערכת.
2) קורות חיים של זמרים הקיימים במערכת.
כדי שיהיו קורות חיים במערכת אני צריך למלא פרטי זמר כולל שם שלו שאני בוחר מטיבת טקסט.
אני מכווה שעד כן זה ברור אם לא אני ינשה שוב.
מה שאני צריך זה שאילתא שתיתן לי תוצאה כשאת: רק שמות הזמרים שאין להם קורות חיים.
זאת אומרת שתיקח מטבלת "זמרים" שם זמר ותבדוק אותו בטבלת "קורות חיים" אם אין לזמר הזה קורות חיים אז לתת לי את התוצאה.
דוגמא לטבלת זמרים:
-אבי
-דורון
-תומי
-בנצי
-אדיר
-ציון
טבלת קורות חיים:
-אבי
-תומי
אדיר
התוצאה של שאילתא צריכה במקרה הזה לתת לי 3 תוצאות כי לזמרים
דורון,בנצי,ציון אין קורות חיים במערכת.
אם משהו לא מובן על ידי "ציור" שכבר עשיתי אני ינסה שוב.
תודה שוב על העזרה.
ככה
SELECT *
FROM Singers
WHERE Id NOT IN (SELECT SingerId FROM CV)
תודה רבה,זה עבד. טוב שיש מבינה פה.
שאלת על שתי טבלאות, אבל פירטת רק 1.
זה מה שגרם לשאלה שלך להיות בלתי אפשרית למענה.
גם לאחר הסבר שני ?
לא…
פויייייי, לרגע חשבתי אחרת…
זה כבר טוב, כי רציתי לצייר איכשהו 🙂
סתם צוחק.
יום טוב.
שמע פשוט מאוד
שים עמודה בשם status ובדוק אם יש את הערך 0 אז סימן שאין לזמר ביוגרפייה ואם יש את הערך 1 אז סימן שיש לו ביוגרפיה…
מובן???
טוב…
לא שמתי לב שילדה בלבן ענתה לך…
ובהרבה הרבה הרבה יעיל והכי …..
חשוב שהיא ענתה נכון ואתה לא.
תודה בכל זאת על נסיון לעזור, נראה לי שלמדת גם משהו מתשובה שלה 🙂
קודם כל, שתי התשובות שקיבלת נכונות,
למרות שהתשובה של הילדה בלבן טובה יותר, גם היא לא היעילה ביותר האפשרית.
הדרך הנכונה לעשות דבר כזה היא בעזרת join, ולא בעזרת שאילתה מקוננת:
SELECT strSingerName
FROM singersTBL, cvTBL
WHERE singersTBL.intSingerId = cvTBL.intSingerId
AND cvTBL.strSingerCv IS NULL
הבהרות:
א) את שמות הטבלאות והשדות אני מניח שאתה מבין, אם תצטרך הסבר, פשוט תשאל.
ב) לכל מסד נתונים יש את הסטיות שלו מהתקן הכללי של SQL – יכול מאוד להיות ש IS NULL תצטרך לכתוב אחרת, לדוגמא.
ג) כמובן, צריך לאפשר NULL בעמודה של strSingerCv.
ד) שליפה של * היא השליפה הכי לא יעילה שיש – גם כשאתה צריך לשלוף את כל השדות בטבלה, תמיד יהיה יעיל יותר לשלוף בעזרת שמות ספציפיים, ועל אחת כמה וכמה כשאתה צריך רק חלק מהשדות.
תשובה של וnirthekingו לא נכונה, למה
כי הראתי לפי מה שאני צריך ,כלומר לפי טבלאות שאני עשיתי.
הדוגמא שלו מחייבת אותי לשנות ולעשות שינויים קטנים בטבלה שלא צריך בכלל.
תודה על העזרה בכל זאת.
לא מתאימה לך, נכון, אבל היא תעבוד.
זה גם לא שימוש נכון ב DB, אבל זה כבר קשור לסיבה שהופכת את התשובה של הילדה בלבן ליותר טובה משלו.
לא ממש הבנתי…
את החלק האחרון של השאילתה שילדה בלבן הביאה???
את החלק שנמצא…
בתוך אופרטור ה-in
זה אומררררר…..
תן לי את כל מטבלה 1 שאין אותם בטבלה 2
דוגמא לטבלת זמרים:
-אבי
-דורון
-תומי
-בנצי
-אדיר
-ציון
טבלת קורות חיים:
-אבי
-תומי
אדיר
התוצאה של שאילתא צריכה במקרה הזה לתת לי 3 תוצאות כי לזמרים
דורון,בנצי,ציון אין קורות חיים במערכת
טוב תודה!!!
נכון
חחחחח, מה נכון ?