Mysql 如何交叉联接表并使用交叉联接的where子句中select语句中的字段

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语句中设置变量,并在交叉联接中使用它们。 作为行项目的我的计数*为0

我做错了什么?

谢谢帕拉_

这管用

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`