PDA

View Full Version : UNION دو جدول با ستونهای نا برابر



dkhatibi
جمعه 07 دی 1386, 18:50 عصر
این (http://barnamenevis.org/forum/showthread.php?t=89527) سوال را در اینجا هم مطرح می کنم.
در بخش SQLServer با یک دید دیگه به اون نگاه می شد.
یکی از چداول حاوی کد. فیلد 1 می باشد. این جدول با جدول دوم که حاوی کد و فیلد 2 است Join ئی شه. مشک اینجاست که ممکنه برای کدی در جدول یک متناضر اون کدید ر جدول 2 تعریف نشد باشد. ولی باید یک کوئری الحاق دو جدول و در صورت عدم وجود کدی در جدول 2 فقط مقادیر کد و فیلد یک از جدول یک را برگرداند.(رکورد مناظر بدون Join شدن)

JAFO_IRAN
شنبه 08 دی 1386, 15:18 عصر
سلام

این با left outer join انجام میشه. ولی البته union داستان دیگری است؛ در union سطرهای جدول دوم پس از سطرهای جدول اول میان ولی در join هر دو جدول باهم تشکیل یک سطر سطر میدند. در مثال شما، حاصل به اندازه جدول اول سطر خواهد داشت:



select Code1, Field1, Code2, Field2
from Table1
left outer join Table2 on Code1 = Code2


ارادت

dkhatibi
شنبه 08 دی 1386, 16:29 عصر
فرمایش شما کاملا صحیحه.
این روش را امتحان کرده بودم. مشکلی هم نداشت.
اما مشکل واقعی من اینه که جدول دوم نیز Join هایی روی چند فیلد خود دارد. البته این فیلدها حاوی کدهایی هستند که حتما متناظر اونها در جدولهای دیگر فیلدی هست. من به هیچ نحو نمی تونم از Inner Join یا الحاق با شرط تساوی مناسب جواب بگیرم. مرتب با یک پیام خطا مواجه شده یا اینکه نتیجه اونی نیست که می خوام و باید باشد.

JAFO_IRAN
شنبه 08 دی 1386, 17:28 عصر
سلام

جدول دوم رو با inner joinهاش به صورت یک subquery بنویسید و نتیجه رو با جدول اول left outer join کنید - امیدوارم مفید باشه:



select some_fields
from Table1
left outer join (
select som_fields
from Table2 inner join Table3 on .... ) SQ on ....


ارادت

dkhatibi
شنبه 08 دی 1386, 18:43 عصر
ممنون
مشکل حل شد ولی
1 - Sq رو تو راهنما Sql Server ندیدم.
2- Inner Join با چند جذول برم خطا نی داد. من با select و from کردن از چند جدول و به کاربردن شرطای تساوی در Where مشکل را حل کردم. این روش تفاوتی با Inner Join دارد؟

JAFO_IRAN
شنبه 08 دی 1386, 18:50 عصر
سلام

SQ چیز مهمی نیست - وقتی sub-query به جای جدول استفاده میکنی باید بهش اسم بدی - SQ همون اسم sub query هستش.

ذکر نام چند جدول با کاما و بدون join روش قدیمی برای همون inner join هستش - دقیقا مثل هم هستند فقط عبارت شرط رو به جای on در همان where مینوشتند...

ارادت