SELECT C.Contract_Code, P.Basic_Quantity,P.Basic_Unit,P.Product_Code , (SELECT TOP 1 M.ZTJZ4 FROM Material_T M WHERE M.Manage_Code=P.Product_Code) ZTJZ4 FROM Contract_T C WITH (NOLOCK) INNER JOIN Contract_Product_T P WITH (NOLOCK) ON C.Contract_GUID =P.Contract_GUID AND C.Can_Show = 1 AND P.Can_Show =1 AND C.Approval_Status !='5' WHERE C.Product_Group =28 AND Party_B = '10050019' AND YEAR(Signing_Time) ='2022' AND P.Basic_Quantity >0
时间: 2024-03-29 16:41:47 浏览: 18
这是一条 SQL 查询语句,查询了符合以下条件的合同产品信息:
- 产品组为28
- 乙方为'10050019'
- 签订时间为2022年
- 基本数量大于0
查询结果包括合同编号、基本数量、基本单位、产品编号以及产品的ZTJZ4属性(通过子查询获取)。其中,WITH(NOLOCK)表示使用不加锁的方式读取数据,可以提高查询效率但也会增加数据不一致的风险。
相关问题
SELECT C.Contract_Code, P.Basic_Quantity,P.Basic_Unit,P.Product_Code , M.ZTJZ4 FROM Contract_T C WITH (NOLOCK) INNER JOIN Contract_Product_T P WITH (NOLOCK) ON C.Contract_GUID =P.Contract_GUID AND C.Can_Show = 1 AND P.Can_Show =1 AND C.Approval_Status !='5' INNER JOIN Material_T M ON M.Manage_Code=P.Product_Code WHERE C.Product_Group =28 AND Party_B = '10050019' AND YEAR(Signing_Time) ='2022' AND P.Basic_Quantity >0
这是另一条查询语句,与之前的语句相比,将子查询改为INNER JOIN,这样可以避免多次扫描Material_T表,提高查询效率。同时,将筛选条件放到JOIN语句中也可以提高查询效率,因为WHERE语句通常是在JOIN操作之后应用的。
这条查询语句的执行顺序是:首先从Contract_T表中筛选出符合条件的记录,然后通过INNER JOIN将Contract_T表和Contract_Product_T表进行关联,再通过INNER JOIN将Contract_Product_T表和Material_T表进行关联,最后根据WHERE条件进行筛选。
需要注意的是,使用NOLOCK可以提高查询效率,但也可能会引入脏读等数据一致性问题,需要谨慎使用。
function getPagedList(contractId) { var contractId = body.param.contractId; var sql = ` SELECT a.id, a.contract_id contractId, a.product_id productId, a.purchase_num purchaseNum, a.purchase_price purchasePrice, a.remark, b.product_name productName, b.spec_code specCode, c.type_name typeName, d.unitcode unitCode FROM mes214820519.wms_pur_list_214820519 a, mes214820519.wms_product_214820519 b, mes214820519.wms_product_class_214820519 c, mes214820519.wms_unit_code_214820519 d WHERE a.product_id=b.id AND b.product_class_id = c.id AND b.unit_code_id=d.id AND a.contract_id=#{contractId}`; return db.pager(sql, {contractId: contractId}) } 用JavaScript语言修改这段代码
function getPagedList(contractId) {
var sql = `SELECT
a.id,
a.contract_id as contractId,
a.product_id as productId,
a.purchase_num as purchaseNum,
a.purchase_price as purchasePrice,
a.remark,
b.product_name as productName,
b.spec_code as specCode,
c.type_name as typeName,
d.unitcode as unitCode
FROM
mes214820519.wms_pur_list_214820519 a
INNER JOIN mes214820519.wms_product_214820519 b
ON a.product_id = b.id
INNER JOIN mes214820519.wms_product_class_214820519 c
ON b.product_class_id = c.id
INNER JOIN mes214820519.wms_unit_code_214820519 d
ON b.unit_code_id = d.id
WHERE
a.contract_id = :contractId`;
return db.pager(sql, { contractId: contractId });
}
在修改后的代码中,我使用了ES6模板字符串来构建SQL语句,同时使用了INNER JOIN来连接多张表,使代码更加简洁易读。另外,我还使用了命名参数代替了原来的占位符,以提高代码的可读性和可维护性。