שאילתה ב-MSSQL

aphrodisiac666

New member
שאילתה ב-MSSQL

יש טבלה - שתי עמודות שתיהן מכילות ID (טבלה מקשרת ליצירת יחס רבים לרבים) נגיד משהו כזה:
CREATE TABLE tbl_IDS (id_1 int, id_2 int)​
אני מקבל רשימת IDים של עמודה שניה וצריך לקבל את כל הIDים מעמודה שניה אשר משולבים עם כל הערכים שקיבלתי ברשימה דוגמת נתונים - תוכן הטלבה:
id_1 | id_2 ------------- 1 | 1 1 | 3 2 | 3 2 | 1 3 | 1 3 | 2 4 | 2 4 | 3 5 | 3 5 | 2​
אני מקבל ערכים הבאים: 1,3 שהם ערכי עמודה 2 כתוצאה משאילתה אני צריך לקבל שתי שורות שמכילות שני ערכים במקרה הזה 1,2 שהם ערכי עמודה 1 מקווה שהסברתי את עצמי ברור בסיס נתונים MSSQL
 

זהר פלד

New member
אם הבנתי את השאלה,

אולי משהו כזה?
SELECT DISTINCT Id_1 FROM Tbl_IDS WHERE Id_2 IN(1,3)​
 

aphrodisiac666

New member
זהו שבדיוק לא

IN זה בעצם OR ואני צריך משהו
SELECT DISTINCT Id_1 FROM Tbl_IDS WHERE Id_2 = 1 AND Id_2 = 3​
רק ששאילתה קזאת אף פעם לא תתקיים אז אני צריך בעצם IN של אומר וגם וגם ולא או סיבכתי את עצמי כבר...
 

זהר פלד

New member
עכשיו הבנתי את השאלה לפחות ../images/Emo13.gif

אולי אפשר לנסות איזה התחכמות עם SELF JOIN:
SELECT DISTINCT t1.id_1 FROM Tbl_IDS AS t1 INNER JOIN Tbl_IDS AS t2 ON(t1.id_1 = t2.id_1) WHERE t1.id_2 = 1 AND t2.id_2 = 3​
 

aphrodisiac666

New member
JOIN עצמי זה דבר הכי פשוט אבל

מספר רשימות לא קבוע לכן לא נתן לעשות את זה... האמת מצאית פתרון מגעיל: לפני ריצת שילתה אני בודק כמה ערכים יש לי ברשימה אחרי זה מוסיף COUNT לשאילתה סופית כדי לדעת כמה פעמים הערכים מעמודה 1 חוזרים על עצמים ומוסיף HAVING עם תנאי שהCOUNT שווה למספר ערכים ברשימה...
 

s h i m s h o n

New member
זה באמת פתרון מגעיל

אבל הנה פתרון מגעיל לא פחות - תשים בטבלה זמנית את כל הערכים שקיבלת ברשימה ותריץ:
select distinct id1 from tbl a where not exists( select 1 from temp left join tbl b on temp.id2 = b.id2 and b.id1 = a.id1 where b.id2 is null)​
בברכה, ש.
 

aphrodisiac666

New member
בקצרה

אני מנסה לקבל את כל הערים מעומדה 1 שמקושרים לכל הערים מתוך רשימה מועברת של ערכים מעמודה 2
 

24sharon

New member
ולמה שלא תרוץ בלולאה על הערכים

ואז תיצור את השאילתא דינמית?
 
ומה הבעיה עם IN../images/Emo35.gif

אתה לא ברור כל כך... יש לך טבלה עם שתי עמודות, שתיהן הן מספר עיר, עכשיו אתה רוצה לשלוף את כל מספרי הערים שמקשורות לערים X, Y ו - Z, והערים שמתקבלות חייבות להיות מקושרות לשלושת הערים
כלומר עיר A חייבת להיות מקושרת גם ל - X Y ו - Z ע"מ שהיא תוחזר
 
אולי...

SELECT id FROM tblEntities WHERE ( SELECT COUNT(*) FROM tbl_IDS WHERE id_1 = @YourID AND id_2 IN (SELECT id FROM YourSource) ) = (SELECT COUNT(*) FROM YourSource)​
 
תיקון

SELECT id FROM tblEntities WHERE ( SELECT COUNT(*) FROM tbl_IDS WHERE id_1 = tblEntities.id AND id_2 IN (SELECT id FROM YourSource) ) = (SELECT COUNT(*) FROM YourSource)​
 
כמובן שתעשה את זה מ- View...

במקום ישירות מהטבלה tbl_IDS
Select id_1,id_2 Union All Select id_2,id_1​
 
למעלה