דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. שאלה ב SQL

שאלה ב SQL

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 3 כותבים 101 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי
    #1
    DROP TABLE IF EXISTS tmp;
    DROP TABLE IF EXISTS tmp2;
    
    CREATE TABLE tmp(
    	id BIGINT
    );
    
    CREATE TABLE tmp2(
    	id BIGINT
    );
    
    INSERT INTO tmp2 VALUES (10);
    INSERT INTO tmp2 VALUES (10);
    
    INSERT INTO tmp
    SELECT id from tmp2
    WHERE tmp2.id NOT IN (SELECT id from tmp); 
    

    חשבתי שהתוצאה של זה תהיה להוסיף ל tmp רק רשומה אחת ("10")
    כי נעשית בדיקה בשורה 17 (השורה האחרונה) שהערך לא קיים ב tmp

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

    השאלה איך עושים שכן תהיה בדיקה

    dovidD תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      השיב למנצפך ב נערך לאחרונה על ידי
      #2

      @מנצפך לא הבנתי מה רצית.
      יש בשני הטבלאות שורה בודדת של id = 10.
      כעת אתה בוחר את כל השורות בtmp2 שהid שלהם לא קיים בtmp. התוצאה כמובן אפס רשומות.
      מה לא טוב בהתנהגות הזאת? מה אתה כן רוצה?

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      0
      • מנצפךמ מנותק
        מנצפךמ מנותק
        מנצפך
        כתב ב נערך לאחרונה על ידי
        #3

        תפסתי מיד אחרי הפרסום את הבעיה שלי.

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

        אני רוצה שבכל שורה תתבצע בדיקה מול הטבלה הריקה.

        יש לי שאילתה הרבה יותר מורכבת, שניסיתי להביא את החלק הרלוונטי ממנה

        dovidD תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          השיב למנצפך ב נערך לאחרונה על ידי
          #4

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

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          clickoneC תגובה 1 תגובה אחרונה
          1
          • clickoneC מנותק
            clickoneC מנותק
            clickone
            השיב לdovid ב נערך לאחרונה על ידי
            #5

            @dovid
            לדעתי DISTINCT יעזור כאן שלא יהיו כפילויות וממילא תהיה רק שורה אחת בכל פעם
            כמובן שאם תוך כדי נכנסו רשומות מבחוץ זה לא יעזור

            INSERT INTO tmp
            SELECT DISTINCT  id from tmp2
            WHERE tmp2.id NOT IN (SELECT id from tmp); 
            

            אין טסט כמו פרודקשן.

            המייל שלי urivpn@gmail.com

            תגובה 1 תגובה אחרונה
            0

            בא תתחבר לדף היומי!
            • התחברות

            • אין לך חשבון עדיין? הרשמה

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • דף הבית
            • קטגוריות
            • פוסטים אחרונים
            • משתמשים
            • חיפוש
            • חוקי הפורום