Mysql 如何交叉联接表并使用交叉联接的where子句中select语句中的字段
不幸的是,在这种情况下,我不能将此作为一个程序。 我在select语句中设置变量,并在交叉联接中使用它们。 作为行项目的我的计数*为0 我做错了什么?谢谢帕拉_ 这管用Mysql 如何交叉联接表并使用交叉联接的where子句中select语句中的字段,mysql,sql,Mysql,Sql,不幸的是,在这种情况下,我不能将此作为一个程序。 我在select语句中设置变量,并在交叉联接中使用它们。 作为行项目的我的计数*为0 我做错了什么?谢谢帕拉_ 这管用 SELECT @p := `purchaseorder`.`PO` AS `PO` ,`purchaseorder`.`Customer PO` ,`customer`.`Customer` ,`work_order`.`Work Order` ,@l := `work_order
SELECT @p := `purchaseorder`.`PO` AS `PO`
,`purchaseorder`.`Customer PO`
,`customer`.`Customer`
,`work_order`.`Work Order`
,@l := `work_order`.`Line Order` AS `Line Order`
,(SELECT COUNT(*) AS `Line Item`
FROM `work_order`
WHERE `work_order`.`PO` = @p
AND `work_order`.`Line Order` <= @l
) AS `Line Item`
FROM `work_order`
LEFT JOIN `purchaseorder`
ON `purchaseorder`.`PO` = `work_order`.`PO`
LEFT JOIN `customer`
ON `customer`.`RN` = `purchaseorder`.`Customer`
WHERE `purchaseorder`.`PO` IS NOT NULL
ORDER BY `purchaseorder`.`PO`,`work_order`.`Line Order`
from子句在select子句之前求值。也许如果你从你想完成的事情开始,而不是从你想如何完成它开始?否则,您应该能够直接引用外部查询中的列,而不使用variablesNote,因为MySQL不能保证选择列表中表达式的计算顺序。MySQL参考手册警告不要使用这种类型的用户定义变量。你现在观察到的行为不能保证。用户定义的变量不是获得此结果所必需的。标准模式是在子查询中使用对purchaseorder.PO列的简单引用代替@p,并替换@l。
SELECT @p := `purchaseorder`.`PO` AS `PO`
,`purchaseorder`.`Customer PO`
,`customer`.`Customer`
,`work_order`.`Work Order`
,@l := `work_order`.`Line Order` AS `Line Order`
,(SELECT COUNT(*) AS `Line Item`
FROM `work_order`
WHERE `work_order`.`PO` = @p
AND `work_order`.`Line Order` <= @l
) AS `Line Item`
FROM `work_order`
LEFT JOIN `purchaseorder`
ON `purchaseorder`.`PO` = `work_order`.`PO`
LEFT JOIN `customer`
ON `customer`.`RN` = `purchaseorder`.`Customer`
WHERE `purchaseorder`.`PO` IS NOT NULL
ORDER BY `purchaseorder`.`PO`,`work_order`.`Line Order`
SELECT `purchaseorder`.`Customer PO`
,`purchaseorder`.`PO` AS `PO`
,`a_work_order`.`Line Order`
,(SELECT COUNT(*) AS `Line Item`
FROM `work_order` AS `b_work_order`
WHERE `b_work_order`.`PO` = `purchaseorder`.`PO`
AND `b_work_order`.`Line Order` <= `a_work_order`.`Line Order`
) AS `Line Item`
,`a_work_order`.`Work Order`
,`purchaseorder`.`Order Date`
,`customer`.`Customer`
,`a_work_order`.`Part`
,`a_work_order`.`Description`
,`a_work_order`.`Quantity`
,`a_work_order`.`Price Each`
,(`a_work_order`.`Price Each`*`a_work_order`.`Quantity`) AS Total
FROM `work_order` AS `a_work_order`
INNER JOIN `purchaseorder`
ON `purchaseorder`.`PO` = `a_work_order`.`PO`
LEFT JOIN `customer`
ON `customer`.`RN` = `purchaseorder`.`Customer`
ORDER BY `purchaseorder`.`Order Date`,`purchaseorder`.`PO`,`Line Item`