نمایش نتایج 1 تا 12 از 12

نام تاپیک: مشکل در inner join

  1. #1

    مشکل در inner join

    سلام یه مشکلی داشتم اگه میشه راهنماییم کنید
    من 2 تا تیبل دارم توی دیتا بیسم یکیش مقدار ارسالی رو مشخص میکنه
    یکیش هم مقدار دریافتی رو حالا میخوام به کمک inner join یک سری مقادیر رو خارج کنم ولی به مشکل خوردم
    این جدول ارساله
    tbl_sendbasket.JPG
    این هم جدول دریافت
    tbl_recivebasket.JPG
    میخوام مقادیر نام مشتری نام سبد مقدار ارسالی و مقدار دریافتی و کسر ارسالی از دریافتی رو بیارم توی یک جدول ولی یه مشکلم اینه وقتی جدولی توی دریافت یا ارسال نباشه 2بار نشون میده کل جداول رو
    یه مشکلم اینه نمیدونم چطوری بیام جداول ارسالی سبد 3 مشتری با کد 1 رو با هم جمع کنم وبعد از جمع کردن کل جداول دریافتی اون مشتری خاص کم کنم
    این کدیه که درست کردم میشه راهنماییم کنید که باید چیکار کنم؟



    SELECT tbl_sendbasket.customername, tbl_sendbasket.baskets, tbl_sendbasket.basketnumbers,
    tbl_recivebasket.baskets, tbl_recivebasket.basketnumbers

    FROM tbl_sendbasket

    INNER JOIN tbl_recivebasket

    ON tbl_sendbasket.customername=tbl_recivebasket.custo mername
    WHERE tbl_sendbasket.customercode = "1"
    ORDER BY tbl_sendbasket.ID;


    این هم خروجی که میده
    return.JPG
    خروجی باید همچین چیزی باشه تو فتوشاپ درست کردم
    Untitled-1.jpg
    البته باید اگه مثلا میثم 3تا سبد2 توی ارسال در تاریخهای متفاوت داره اول سبدهای 2 باهم جمع بشه تعدادش بدست بیاد بعد از تعداد سبدهای دریافت کم بشه
    آخرین ویرایش به وسیله cnmeysam : سه شنبه 30 آبان 1396 در 04:04 صبح

  2. #2

    نقل قول: مشکل در inner join

    این کد رو درست کردم ولی هنوز مقدار صفر رو نمیدونم چطور بدست بیارم


    SELECT tbl_sendbasket.customername AS "مشتری", tbl_sendbasket.baskets AS "سبد",
    tbl_sendbasket.basketnumbers AS "سبد ارسالی",tbl_recivebasket.basketnumbers AS "سبد دریافتی",
    (tbl_sendbasket.basketnumbers - tbl_recivebasket.basketnumbers) AS "سبد باقی مانده",
    tbl_sendbasket.sender AS "ارسال کننده", tbl_recivebasket.reciver AS "دریافت کننده"
    FROM tbl_sendbasket
    INNER JOIN tbl_recivebasket
    ON tbl_sendbasket.customercode = tbl_recivebasket.customercode
    WHERE tbl_sendbasket.baskets='سبد' AND tbl_recivebasket.baskets='سبد'


  3. #3

    نقل قول: مشکل در inner join

    باید از کلید خارجی استفاده کنید ... اینکه دو تا فیلد از نوع فارسی رو به هم inner join بزنید اصلا روش مناسبی نیست ... در مواقع اظطرار از این روش استفاده میکنند ..
    شما می توانید از کلید خارجی استفاده کنید . ساده ترین راه هست

  4. #4

    نقل قول: مشکل در inner join

    سلام
    customercode که بعد از on گذاشتم حروف فارسی نیست کد فروشندست که یک عدد هستش
    یعنی من توی برنامه گفتم جاهایی که کد فروشنده یکیه لود بشه یعنی فقط میثم رو لود کنه تا اینجا مشکلی نیست درست لود میکنه
    ولی حالا میخوام بگم که وقتی کد فروشنده یکیه و نوع ظرفش سبد 1 هست رو لود کنه ولی ممکنه توی ظروف ارسالی سبد 1 باشه ولی ظروف دریافتی سبد 1 اصلا دریافتی نداشته باشه
    یعنی مثلا 100تا سبد 1 اگه گرفته باشه و هیچ سبد 1 پس نداده باشه خروجیش NULL میشه
    چیکار کنم که خروجی null نشه بگه ارسالی 100 و دریافتی 0 و 100-0 =100

  5. #5

    نقل قول: مشکل در inner join

    نقل قول نوشته شده توسط cnmeysam مشاهده تاپیک
    سلام
    customercode که بعد از on گذاشتم حروف فارسی نیست کد فروشندست که یک عدد هستش
    یعنی من توی برنامه گفتم جاهایی که کد فروشنده یکیه لود بشه یعنی فقط میثم رو لود کنه تا اینجا مشکلی نیست درست لود میکنه
    ولی حالا میخوام بگم که وقتی کد فروشنده یکیه و نوع ظرفش سبد 1 هست رو لود کنه ولی ممکنه توی ظروف ارسالی سبد 1 باشه ولی ظروف دریافتی سبد 1 اصلا دریافتی نداشته باشه
    یعنی مثلا 100تا سبد 1 اگه گرفته باشه و هیچ سبد 1 پس نداده باشه خروجیش NULL میشه
    چیکار کنم که خروجی null نشه بگه ارسالی 100 و دریافتی 0 و 100-0 =100
    به جای inner join از left join استفاده کنید

  6. #6

    نقل قول: مشکل در inner join

    البته توصیه میکنم یه یک جدول دیگه داشته باشی و از اونجا به این دوتا left join بزنی ..
    اینطوری اگه هر کدوم خالی باشه اون یکی رو میاره

  7. #7

    نقل قول: مشکل در inner join

    ممنون از راهنماییتون
    مشکل اینجاست من تازه کارم تا الان با دیتابیس کار نکردم
    میشه همین کد رو برام درست کنید تا بهتر متوجه بشم؟
    شرمنده وقتت رو میگیرم بخدا آدم تنبلی نیستم ولی 2روزه هرکاری میکنم خروجی نمیگیرم

  8. #8

    نقل قول: مشکل در inner join

    نقل قول نوشته شده توسط cnmeysam مشاهده تاپیک
    ممنون از راهنماییتون
    مشکل اینجاست من تازه کارم تا الان با دیتابیس کار نکردم
    میشه همین کد رو برام درست کنید تا بهتر متوجه بشم؟
    شرمنده وقتت رو میگیرم بخدا آدم تنبلی نیستم ولی 2روزه هرکاری میکنم خروجی نمیگیرم

    SELECT tbl_sendbasket.customername AS "مشتری", tbl_sendbasket.baskets AS "سبد",
    tbl_sendbasket.basketnumbers AS "سبد ارسالی",tbl_recivebasket.basketnumbers AS "سبد دریافتی",
    (tbl_sendbasket.basketnumbers - tbl_recivebasket.basketnumbers) AS "سبد باقی مانده",
    tbl_sendbasket.sender AS "ارسال کننده", tbl_recivebasket.reciver AS "دریافت کننده"
    FROM tbl_customercode
    LEFT JOIN tbl_recivebasket
    ON tbl_customercode.id = tbl_recivebasket.customercode
    LEFT JOIN tbl_sendbasket
    ON tbl_customercode.id tbl_sendbasket.customercode
    WHERE tbl_sendbasket.baskets='سبد' AND tbl_recivebasket.baskets='سبد'

    یک جدول با نام tbl_customercode ایجاد کنید
    آخرین ویرایش به وسیله sajjad.eskandary : سه شنبه 30 آبان 1396 در 16:28 عصر دلیل: توضیحات تکمیلی

  9. #9

    نقل قول: مشکل در inner join

    سلام
    من تیبل رو ساختم یه id هم بهش دادم 2 تا id هم بهش اضافه کردم 1و2 که با کاستومر کدهام یکی باشه
    کد شما اول سینتکس ارور میداد

    ON tbl_customercode.id tbl_sendbasket.customercode

    بین اینها یک AND اضافه کردم حل شد
    ولی مشکل هنوز پابرجاست
    یعنی توی خروجی بجای 1بار برای هر مشتری مثلا 2بار سبد رو لود و محاسبه میکنه این مدلی و برای دومی اعدادش اصلا توی دیتابیس هم نیست
    ۱.JPG
    بعد ممکنه مثلا سبد 2 ارسال شده باشه ولی دریافت نشده باشه مقدار صفر رو نمیذاره برای دریافت حتی null هم نمیاره الان در حالی که مثلا برای سبد2 باید بگه ارسالی 5 دریافتی 0 و 5-0=5
    2.JPG

  10. #10

    نقل قول: مشکل در inner join

    نا گفته نمونه توی خود جاوا این مشکل رو این ملی حل کردم

    try {
    String url ="jdbc:mysql://localhost:3306/fixedprices?user=root&password=&useSSL=false&chara cterEncoding=UTF-8";
    Class.forName("com.mysql.jdbc.Driver").newInstance ();
    Connection con = DriverManager.getConnection(url);
    Statement st =con.createStatement();
    Statement st1 =con.createStatement();
    Statement st2 =con.createStatement();
    Statement st3 =con.createStatement();
    Statement st5 =con.createStatement();
    Statement st6 =con.createStatement();

    int rowcount = -1;
    int rowcount2 = -1;
    int rowcount3 = -1;
    int rowcount4 = -1;
    ResultSet resultSet = st.executeQuery("select count(basketnumbers) from tbl_sendbasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+" '");
    ResultSet res1Set = st1.executeQuery("select sum(basketnumbers) from tbl_sendbasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+" '");
    ResultSet resultSet2 = st2.executeQuery("select count(basketnumbers) from tbl_recivebasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+" '");
    ResultSet res1Set2 = st3.executeQuery("select sum(basketnumbers) from tbl_recivebasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+" '");
    resultSet.next();
    res1Set.next();
    resultSet2.next();
    res1Set2.next();
    rowcount = resultSet.getInt(1);
    rowcount2 = res1Set.getInt(1);

    rowcount3= resultSet2.getInt(1);
    rowcount4= res1Set2.getInt(1);
    if(rowcount > 0){

    txtsendcount.setText(Integer.toString(rowcount));
    txtsendbasket.setText(Integer.toString(rowcount2)) ;
    txtcountrecive.setText(Integer.toString(rowcount3) );
    txtvalrecive.setText(Integer.toString(rowcount4));
    }
    if(rowcount3 > 0){

    txtsendcount.setText(Integer.toString(rowcount));
    txtsendbasket.setText(Integer.toString(rowcount2)) ;
    txtcountrecive.setText(Integer.toString(rowcount3) );
    txtvalrecive.setText(Integer.toString(rowcount4));
    }else{
    int val = 0;
    ResultSet resSet = st5.executeQuery("select count(basketnumbers) from tbl_sendbasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+"' ");
    txtsendcount.setText(Integer.toString(val));
    resSet.next();
    val= resSet.getInt(1);
    txtsendbasket.setText(Integer.toString(val));

    int val1 = 0;
    ResultSet resSet2 = st6.executeQuery("select count(basketnumbers) from tbl_recivebasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+"' ");
    txtcountrecive.setText(Integer.toString(val1));
    resSet2.next();
    val1= resSet2.getInt(1);
    txtvalrecive.setText(Integer.toString(val1));
    }
    String a = txtsendbasket.getText();
    String b = txtvalrecive.getText();
    int c = Integer.parseInt(a)-Integer.parseInt(b);
    txtsum.setText(Integer.toString(c));
    }catch (Exception ex)
    {
    JOptionPane.showMessageDialog(null, ex.getMessage());
    }



    ولی فکر میکنم باید راه بهتری باشه که از طریق خود دیتابیس این مشکل حل بشه

  11. #11

    نقل قول: مشکل در inner join

    همون سوال رو با روش و توضیح کامل تری میپرسم شاید متوجه منظورم بشید



    من 2تا تیبل دارم یکیش tbl_send و یکیش هم tbl_receive
    برای send ستونهای به این شکل دارم
    customercode و baskets و basketnumbers

    وبرای receive هم همین ستونها رو دارم یعنی
    customercode و baskets و basketnumbers

    حالا ممکنه برای یک مشتری با کد یه سبد ارسال کنم یعنی توی جدول سند این جوری میشه
    1- سبد خالی 10
    و برای مشتری دیگه با کد جدید سبد دیگه ای رو ارسال کنم یعنی این مدلی
    2- سبد پر 50
    و توی قسمت تیبل دریافت فقط مشتری شماره 1 تعدادی سبد رو پس فرستاده باشه مثلا 7 تاش رو
    سوال اینجاست اول چطوری همه محصولات ارسالی و دریافتی رو یکجا ببینم که مشخص باشه مثلا مشتری 1- از من 10 تا سبد خالی گرفته و 7 تا هم پس داده و محاسبه کنم 10-7=3 تا باقی مانده
    و دوم مشتری 2- از من 50 تا سبد پر گرفته و چیزی پس نفرستاده و توی خروجی نمایش بده و محاسبه کنه 50-0=50 تا باقی مانده
    در اصل 2تا کد نیاز دارم
    یکیش باید طبق توضیح بالا همه انواع سبد رو نمایش بده
    یکیش هم مثلا فقط سبدهای خالی رو نمایش بده

  12. #12

    نقل قول: مشکل در inner join

    ممنون از اینکه هرچند کم ولی راهنمایی کردین
    به کمک یکی از دوستای خوبم جواب رو پیدا کردم در اصل باید از union استفاده میکردم و کدی که لازم داشتم اینه شاید روشش به درد کسی بخوره

    select customercode,customername,baskets,SUM(sendnumber) as sumsend,Sum(recnumber) as sumrecive,SUM(sendnumber)-Sum(recnumber) as mandeh from (select 1 askind,ID,customercode,customername,baskets,basket numbers as sendnumber,0 as recnumber from tbl_sendbasket UNION SELECT 2 as kind,ID,customercode,customername,baskets,0,basket numbersFROM tbl_recivebasket ) k group by customercode,customername ,baskets




تاپیک های مشابه

  1. مشکل در INNER JOIN
    نوشته شده توسط abbas3zaar در بخش PHP
    پاسخ: 5
    آخرین پست: جمعه 18 فروردین 1396, 08:56 صبح
  2. مشکل در Inner Join بین سه جدول؟
    نوشته شده توسط پیام حیاتی در بخش T-SQL
    پاسخ: 5
    آخرین پست: شنبه 02 آبان 1394, 17:31 عصر
  3. سوال: مشکل در Inner Join بین چهار جدول؟
    نوشته شده توسط پیام حیاتی در بخش ASP.NET Web Forms
    پاسخ: 12
    آخرین پست: سه شنبه 28 مهر 1394, 12:41 عصر
  4. مشکل در inner join
    نوشته شده توسط aliasghar2 در بخش T-SQL
    پاسخ: 3
    آخرین پست: سه شنبه 17 اسفند 1389, 10:04 صبح
  5. حرفه ای: مشكل در Inner Join و RowNum
    نوشته شده توسط Mostafa_Dindar در بخش SQL Server
    پاسخ: 2
    آخرین پست: سه شنبه 15 دی 1388, 17:06 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •