استفاده از GENERATE برای INNER JOIN

GENERATE : تابع با دو آرگومان از نوع جدول میگیره و کاملا مشابه CROSSJOIN عمل میکنه و تمام رکوردهای جدول دوم در رکوردهای جدول اول ضرب می شوند از جمله تفاوت های این دو تابع میشه به این موارد اشاره کرد :

  • تابع GENERATE تنها دو جدول می پذیرد ولی CROSSJOIN امکان ردیافت بیش از دو جدول رو هم داره
  • امکان فیلتر و پیاده سازی JOIN های دیگر در CROSSJOIN وجود ندارد و در تابع GENERATE به خاطر Row Context بودن امکان اعمال فیلتر در سطح سطر را داراست

به طور مثال دو جدول زیر رو به ترتیب با نام های TableA و TableB در نظر بگیرید :

جدول A

ID Make Model Value
1 toyota Corolla 10
2 hyundai elantra 20
3 Ford Focus 30

جدول B

Make Model Year Index
toyota Corolla 2018 100
toyota Corolla 2018 200
hyundai elantra 2019 300
hyundai elantra 2019 400
Ford Focus 2018 500
Ford Focus 2019 600

در صورتی که این دو جدول رو در هم ضرب کنیم خواهیم داشت :

چون نام برخی ستون ها یکسان است برای جلوگیری از خطا نام های جدید به ستون های جدول دوم دادیم.

از خروجی بالا در صورتی که بخواهیم رکوردهایی که مدل و سازنده در هر دو جدول یکسان هستند در جلوی یکدیگر قرار بگیرند دیگه نمیشه از CROSSJOIN استفاده کرد و با GENERATE و استفاده از فیلتر، ستون های برابر رو در نظر می گیریم. در حقیقت INNER JOIN داریم انجام میدیم. کد مد نظر رو میشه به سه شکل با استفاده از توابع یکسان نوشت که در هر حال خروجی یکسان خواهد دش.

روش اول :

خروجی اول :

روش دوم :

خروجی دوم :

روش سوم :

خروجی سوم :

 

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست