2017-06-15 65 views
0

我有一個項目正在工作,我一直在測試我的查詢,看看他們是如何工作的,但問題是當我傳遞一個參數到查詢它不是限制它的參數我通過。參數化查詢不限制在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

您是否嘗試第二個查詢? – 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'