2017-02-02 7 views
-3

sql selectクエリで複数のテーブルのデータをフィルタリングしています。そのために、C#.netで左外部結合を使用しています。したがって、このクエリフィルタを実行することによって、適切に動作しません。 EXのために左外部結合クエリは、条件によって正しく機能しません。

:私はbranchid 1であるとyearidが1であるクエリをexcuteときに、それは正常に動作すなわち、それはデータのみがブランチと年のidはそのbranchidある1

他のデータであることを示すデータを持っています2とyearidは1です。このとき、このフィルタに基づいてクエリを実行すると、branchidが1、yearidが1、branchidが2、yearidが1であることが示されます。

これは、支店と年配のデータ。したがって、その時点でフィルタは機能していません。ここで

は私のクエリは、クエリで

SELECT DISTINCT 
     Client.clientname AS ClientName , 
     RetailInvoice.invoiceno AS InvoiceNo , 
     RetailInvoice.pono AS PoNO , 
     RetailInvoice.issuedate AS IssueDate , 
     RetailInvoice.duedate AS DueDate , 
     RetailInvoice.discount AS Discount , 
     RetailInvoice.shipping AS Shipping , 
     RetailInvoice.tax AS Tax , 
     RetailInvoice.vat AS Vat , 
     RetailInvoice.sese AS Sese , 
     RetailInvoice.paymenttype AS PaymentType , 
     RetailInvoice.chequeno AS Chequeno , 
     RetailInvoice.totalamt AS TotalAmt , 
     RetailInvoice.description AS Description , 
     RetailInvoice.paymentpaid AS PaymentPaid , 
     RetailInvoice.subtotal AS Subtotal , 
     RetailInvoicePayment.productid AS ProductName , 
     RetailInvoicePayment.uom AS Uom , 
     RetailInvoicePayment.quantity AS Quantity , 
     RetailInvoicePayment.price AS Price 
FROM tbl_retailinvoice RetailInvoice 
     LEFT OUTER JOIN tbl_retailinvoicepayment RetailInvoicePayment 
      ON RetailInvoice.invoiceno = RetailInvoicePayment.invoiceno 
     LEFT OUTER JOIN tbl_clientdetail Client 
      ON RetailInvoice.clientid = Client.clientid 
WHERE RetailInvoice.BranchID = 1 
     AND RetailInvoice.YearID = 1 
     AND RetailInvoice.invoiceno = 1; 
+1

これは実際にはC#または.netとの関連性はありません。それは単なるSQLの問題です – Tanner

+0

これはC#との関連性を示しているとは限りません。私はこれをC#で作成したことを説明したいと思います。だから私はC#タグを追加しています。私はあなたがあなたに言っていることをあなたが理解していると思います。 –

+0

私はあなたが何を言っているのか理解していますが、これはポストのSQLの問題であるため、他の情報は質問に価値を追加しません。 – Tanner

答えて

0

です:

FROM tbl_retailinvoice RetailInvoice 
     LEFT OUTER JOIN tbl_retailinvoicepayment RetailInvoicePayment 
      ON RetailInvoice.invoiceno = RetailInvoicePayment.invoiceno 
     LEFT OUTER JOIN tbl_clientdetail Client 
      ON RetailInvoice.clientid = Client.clientid 
WHERE RetailInvoice.BranchID = 1 
     AND RetailInvoice.YearID = 1 
     AND RetailInvoice.invoiceno = 1; 

WHERE句のすべての3つの条件がテーブルRetailInvoiceに焦点を当てています。

WHERE RetailInvoice.BranchID = 2 
     AND RetailInvoice.YearID = 1 
     AND RetailInvoice.invoiceno = 1; 

それはまだあなたのWHERE句が出来、可能にすべきではないRetailInvoice.BranchID = 1漠然とが話した行を、示し..that:あなたはこれにWHERE条件を変更してもと言います具体的には、BranchIDが2の行のみが返されるように指示します。私はここでは多くの情報を持っていないので、「あいまいに話す」と言いますが、原則としてあなたが言っていることは無意味ではないようです。

問題の説明の何かが私に追加されません。この問題はLEFT JOINに含まれるテーブルの1つを指しているWHEREの条件が1つもないため、LEFT JOINには関係しないはずです。言い換えれば、問題は他の場所にあるように見えます。

FYI、LEFT JOINは単に「 RetailInvoicePaymentまたはクライアントテーブルに一致する行がない場合でも、私の RetalInvoiceからの情報を表示します。」を意味します INNER JOINとは対照的に、一致する行が3つのテーブルすべてに存在するデータのみを表示します。

関連する問題