PDA

View Full Version : مشکل انتخاب فیلدهای تکراری در استفاده از union



arash_hemmat
پنج شنبه 20 اردیبهشت 1386, 03:15 صبح
سلام
با یک مشکل حاد برخورد کردم که فعلا نتونستم راه حلی براش پیدا کنم!
میخوام از چندتا table یک فیلد (تو این مثال name) رو انتخاب کنیم و تکراری ها رو حذف کنم برای اینکار از query زیر استفاده کردم:

SELECT DISTINCT name FROM `users`
UNION

SELECT DISTINCT name FROM `admins`
UNION

SELECT DISTINCT name FROM `people`
این query نامهای تکراری رو از هر لیست حذف میکنه و نامهای تکراری رو نشون نمیده ولی مشکل اینجاست که اگر هم تو جدول users و هم تو جدول admins یه اسم مشترک مثلا "علی" داشته باشیم، با این query "علی" دوبار نشون داده میشه!
برای حل این مشکل میشه از یک view استفاده کرد ولی همونطور که میدونید viewها فقط در نسخه های بعد از 5 در mysql پشتیبانی میشن و من باید اینو رو mysql نسخه 4.1 اجرا کنم!
بنظرتون چیکار میشه کرد؟

unhandled_event
پنج شنبه 20 اردیبهشت 1386, 06:36 صبح
سلام

من تجربه زیادی با MySQL ندارم ولی دارم با ورژن 5 تمرین میکنم همین شرایطی که شما میگی رو ایجاد کردم و دیدم اگر هردو اسم تو هر دوتا table رو کرد یکی و فقط یک بار نشون داد
شاید دوتا مقدار واقعا فرق دارن حتما دستوری شبیه به TRIM داره MySQL که میشه دقیقا یکیشون کرد و از این بابت خاطر جمع شد
اما این روش رو امتحان کنین چون تو SQL server کار میکنه یعنی Query رو بنداز تو یه SELECT دیگه
) SELECT DISTINCT name FROM
SELECT DISTINCT name FROM `users`
UNION

SELECT DISTINCT name FROM `admins`
UNION

SELECT DISTINCT name FROM `people`
A (
نمیدونم ورژنی که شما داری این syntax رو ساپورت میکنه یا نه

reza_rad
شنبه 22 اردیبهشت 1386, 07:35 صبح
Union که سطرهای تکراری رو چاپ نمی کنه! اون Union all هست که تکراری های رو نشون میده.

ولی اگه مشکلت باقیه اینکار رو می تونی بکنی:




Select distinct name from table1
where name not in
(
select name from table2
union
select name from table3)
union
select distinct name from table2
where name not in
(
select name from table 3)
union
select distinct name from table3

arash_hemmat
یک شنبه 23 اردیبهشت 1386, 09:04 صبح
ممنونم، هر دو روشی که پیشنهاد شد مفید بود.