2017-06-15 53 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'