2017-06-15 18 views
0

プロジェクトの作業中ですが、クエリの動作を確認するためにテストしていますが、クエリにパラメータを渡したときにパラメータI合格。ここでパラメータ化されたクエリはmssqlサーバーでは制限されていません

は、クエリ構文です:

SELECT C.*, 
      F.Bank_VNO, 
      F.sname 
    FROM customer C 
      LEFT JOIN fssign F 
        ON c.cust_no = f.cust_no 
        AND F.cust_no = '100055' 
      LEFT JOIN (SELECT Min(ac_no) ac_no 
         FROM loans 
         WHERE full_paid = '0' 
         GROUP BY ac_no) AS l 
        ON c.cust_no = l.ac_no 
        AND cust_type = 'BUS' 

答えて

0

私はあなたが何を意味するかは非常に明確ではないと思うが、あなたはGROUP BY削除する必要がありますことがあります

SELECT C.* 
     ,F.Bank_VNO 
     ,F.sname 
    FROM customer C 
    LEFT JOIN fssign F ON c.cust_no = f.cust_no 
       AND F.cust_no = '100055' 
    LEFT JOIN (SELECT MIN(ac_no) ac_no 
       FROM loans 
       WHERE full_paid = '0' 
/*    GROUP BY ac_no */ 
     ) AS l ON c.cust_no = l.ac_no 
     AND cust_type = 'BUS' 

したいという問い合わせてもよいです書き込みは:

SELECT C.* 
     ,F.Bank_VNO 
     ,F.sname 
FROM customer C 
INNER JOIN fssign F ON c.cust_no = f.cust_no      
INNER JOIN (SELECT MIN(ac_no) ac_no 
      FROM loans 
      WHERE full_paid = '0' 
      ) AS l ON c.cust_no = l.ac_no 
WHERE C.cust_type = 'BUS' 
AND F.cust_no = '100055' 
+0

それでも鉱山と同じ結果をもたらしているからです。 –

+0

2番目のクエリを試しましたか? – etsa

+0

しかし、内部結合は、両方のテーブルが左結合とは異なり、結果が得られません。私はそれを実行すると、両方のテーブルの基準が等しくないため、結果が表示されませんでした。 –

0

Left Joinは、レコードをフィルタリングしません。 Where節にフィルタを置かない限り、左のテーブルからすべてのレコードを取得します。

cust_type = 'BUS'の場合にのみレコードが必要だと思います。フィルターをWhere節に移動します。 cust_type列と仮定するとcustomerテーブル

SELECT C.*, 
      F.Bank_VNO, 
      F.sname 
    FROM customer C 
      LEFT JOIN fssign F 
        ON c.cust_no = f.cust_no 
        AND F.cust_no = '100055' 
      LEFT JOIN (SELECT Min(ac_no) ac_no 
         FROM loans 
         WHERE full_paid = '0' 
         GROUP BY ac_no) AS l -- This query does not make more sense 
        ON c.cust_no = l.ac_no 
Where C.cust_type = 'BUS' 
関連する問題