[英]Parameterize query not limiting in mssql server
我正在处理一个项目,并且一直在测试查询以查看查询的工作方式,但是问题是当我将参数传递给查询时,它并不仅限于我传递的参数。
这是查询语法:
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'
我认为您的意思不是很清楚,但也许您应该删除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'
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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.