使用相同的变量在sql查询中查询多个字段

时间:2012-10-24 11:23:44

标签: 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 . "'   
            AND   `Despatch`.`Product`  =    `Stock`.`ProductCode`      

我的问题是我想扩展它使用$ Despatch的值来使用OR函数搜索同一个表中的另一列。因此查询将查看Despatch Number,如果找不到匹配,则查看订单号,如下所示。它不起作用,我的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`  

1 个答案:

答案 0 :(得分: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'