70٪ تخفیف ویژه جشنواره تابستانه توسینسو
پایان تخفیف تا:
مشاهده دوره‌ها
0

درخواست کوئری

سلام

من 2 تا table دارم با نام های users و friends

users

friends

حالا چطوری میتونم یوزر هایی رو پیدا کنم که یوزر شماره 1 باهاشون دوست نیست.

البته کوئری زیر جواب کار رو میده:

SELECT user_id, name FROM USERS WHERE user_id NOT IN (SELECT friend_id FROM FRIENDS WHERE user_id = 1)

ولی میخوام از join استفاده کنم

خروجی آخر میشه شبیه این:

user_id:
3                   James
4                   Joe
5                  Max
پرسیده شده در 1396/07/22 توسط

5 پاسخ

0

من جواب ها رو چک میکنم اینجا میزارم.دیتا فرضی درست می کنم بعد جواب رو حتما چک می کنم.یعنی به دونسته هام 100% اطمینان هم نمی کنم.

مشکلش کجا بود؟

پاسخ در 1396/07/24 توسط
0

مشکل کوئری شما این بود که فقط کسانی رو میاره که توی تیبل friend موجود باشن.

ممکن که همه یوز ها توی تیبل friend موجود نباشن(اصلا با کسی دوست نباشن)

و مشکل دیگش هم این بود که هرچقدر که توی تیبل friend یوزر تکراری باشن رو میاره

مشکل کوئری شما این بود که فقط کسانی رو میاره که توی تیبل friend موجود باشن.
ممکن که همه یوز ها توی تیبل friend موجود نباشن(اصلا با کسی دوست نباشن)
و مشکل دیگش هم این بود که هرچقدر که توی تیبل friend یوزر تکراری باشن رو میاره
||https://dba.tosinso.com/files/get/76a6b486-5c84-4e5d-ae9e-925269e26fc2||
این خروجی کوئری شماست، مثال:( یوزر 14 یه بار با یوزر 3 دوست شده و یک بار با یوزر 5) بنابراین 2 بار اسمش در این ستون ثبت شده و دوبارش رو میاره

در کل با کوئری که در بالا فرستادم به جواب رسیدم و از روی اون میتونید ببینید منظورم دقیقا چیه.
اون کوئری جواب رو بهم داد و حالا میخوام به صورت رندم ازش بگیرم، باید چیکار کنم؟ بدون ORDER BY RAND()

این خروجی کوئری شماست، مثال:( یوزر 14 یه بار با یوزر 3 دوست شده و یک بار با یوزر 5) بنابراین 2 بار اسمش در این ستون ثبت شده و دوبارش رو میاره

در کل با کوئری که در بالا فرستادم به جواب رسیدم و از روی اون میتونید ببینید منظورم دقیقا چیه.

اون کوئری جواب رو بهم داد و حالا میخوام به صورت رندم ازش بگیرم، باید چیکار کنم؟ بدون ORDER BY RAND()

پاسخ در 1396/07/24 توسط
0
select USERS.user_id from USERS 
left outer join FRIENDS on USERS.user_id = FRIENDS.user_id 
where FRIENDS.user_id <> 1
پاسخ در 1396/07/23 توسط
0

آقا ممنون از جوابت

کوئری شما درست کار نکرد

با کوئری زیر تونستم به جواب برسم

SELECT u.user_id, u.user_name FROM users u
  LEFT JOIN friend f
    ON ( f.friend_id = u.user_id AND f.user_id=1)
 WHERE f.user_id   IS NULL
    OR f.friend_id IS NULL
	LIMIT 5

حالا میخوام 5 تا ردیف رو به صورت رندم از تیبل users بگیره، توی همین کوئری

ORDER BY RAND() جواب میده ولی نمیخوام از این استفاده کنم، راه دیگه ای سراغ دارید؟

پاسخ در 1396/07/23 توسط
0

از اینکه نتونستم جواب درستی ارسال کنم پوزش می طلبم.تو دیتاهای فرضی همه شرایط رو در نظر نگرفتم

پاسخ در 1396/07/24 توسط

پاسخ شما