שלום רב,
שאלה:
יש לי שתי טבלאות בבסיס הנתונים אשר אני רוצה לבצע להם JOIN אך לצערי אין לי שדה מקשר...
כלומר: השדה בטבלה הראשונה הינו "חלק" מהשדה בטבלה השנייה.
לדוגמא: בטבלה הראשונה יש לי עמודה השומרת שם פרטי+שם משפחה ואילו בטבלה השנייה יש לי עמודת שם פרטי בלבד.
כיצד ניתן לבצע join בין שתי הטבלאות?
תשובה:
נהוג לחשוב כי ביצוע Join בין שתי טבלאות הינן רק כאשר שתי העמודות בשתי הטבלאות זהות.
אז זהו שלא... :)
ניתן לשלב במשפט ה- join בעת החיבור בין העמודות - LIke.
לדוגמא:
נקים שתי טבלאות:
טבלה ראשונה תייצג שמות פרטיים של העובדים:
CREATE TABLE [dbo].[t_names](
[name] [nvarchar](50) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[t_names] ([name]) VALUES (N'itai')
INSERT [dbo].[t_names] ([name]) VALUES (N'ziki')
INSERT [dbo].[t_names] ([name]) VALUES (N'david')
הטבלה השנייה תייצג שמות מלאים של העובדים:
CREATE TABLE [dbo].[t_full_names](
[full_name] [nvarchar](50) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[t_full_names] ([full_name]) VALUES (N'itai binyamin')
INSERT [dbo].[t_full_names] ([full_name]) VALUES (N'zipi')
INSERT [dbo].[t_full_names] ([full_name]) VALUES (N'haya')
INSERT [dbo].[t_full_names] ([full_name]) VALUES (N'veracity group')
במידה ונריץ את המשפט השליפה הבא לא נקבל תשובות מהסיבה שהעמודות הינן שוות (למרות שהן זהות בחלקם...):
SELECT *
FROM t_names INNER JOIN
t_full_names ON t_names.name = t_full_names.full_name
FROM t_names INNER JOIN
t_full_names ON t_names.name = t_full_names.full_name
לכן, במידה ונרצה לבצע join בין שתי עמודות שאינן שוות אך זהות בחלקן , נריץ את משפט ה- select כך:
SELECT *
FROM t_names INNER JOIN
t_full_names ON t_full_names.full_name like t_names.name+'%'
בהצלחה!
2 תגובות:
יפה איתי למדתי משהו חדש
אבי זלוף
אבי היקר,
כבוד הוא לי ;-)
הוסף רשומת תגובה