1

我有下面的查询,效果很好。

    SELECT  `Despatch`.`DespatchNumber` , `Despatch`.`Product` ,
           `Stock`.`ProductNumber` ,  `Stock`.`Description` ,      
     `Stock`.`ProductGroup` ,  `Stock`.`Size` ,  `Stock`.`IPICODE`  , `Stock`.`Fit` ,  
     `Stock`.`62` 
            FROM Stock , Despatch 
            WHERE  `Despatch`.`DespatchNumber` = '" . $Despatch . "'   
            AND   `Despatch`.`Product`  =    `Stock`.`ProductCode`      

我的问题是我想扩展它,即我使用 $Despatch 的值使用 OR 函数搜索同一个表中的另一列。因此,查询将查看发货编号,如果找不到匹配项,则查看订单编号,如下所示。它不起作用,我的 mysql 服务器只是挂起试图运行这个查询。

      SELECT  `Despatch`.`DespatchNumber` , `Despatch`.`Product` ,
           `Stock`.`ProductNumber` ,  `Stock`.`Description` ,  `Stock`.`ProductGroup` ,  `Stock`.`Size` ,  `Stock`.`IPICODE`  , `Stock`.`Fit` , `Stock`.`62` 
            FROM Stock , Despatch 
            WHERE  `Despatch`.`DespatchNumber` = '" . $Despatch . "'   
            OR  `Despatch`.`OrderNumber` = '" . $Despatch . "' 
            AND   `Despatch`.`Product`  =    `Stock`.`ProductCode`  
4

1 回答 1

1

您需要在OR子句周围加上括号:

WHERE (`Despatch`.`DespatchNumber` = '" . $Despatch . "'   
OR     `Despatch`.`OrderNumber` = '" . $Despatch . "') 
AND   `Despatch`.`Product`  =    `Stock`.`ProductCode`  

我还强烈建议您JOIN在执行联接时明确使用关键字。这不仅是最佳实践,而且还可以防止在这种情况下发生错误。

SELECT -- ...columns...
FROM Stock AS S
JOIN Despatch AS D
ON D.Product = S.ProductCode
WHERE D.DespatchNumber = 'DN001234'
OR D.OrderNumber = 'DN001234'
于 2012-10-24T11:26:07.423 回答