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 に答える