0

検索機能を作っています。私のSQLクエリは、where句でLIKEandを使用しています。OR LIKE検索しているテーブルのフィールドの 1 つが呼び出さquantity_typesれ、別のテーブルで見つかった値に対応するコードのみが格納されます。したがって、他の値を取得するには、クエリで a を使用したいと考えてLeft Outer Joinいます。

ここに私のサンプルコードがあります:

SELECT * FROM `pharmacy_items`
LEFT OUTER JOIN pharmacy_quantity_types
ON pharmacy_items.quantity_type = pharmacy_quantity_types.id
AND 'pharmacy_items.name' LIKE '%query_here%'
OR 'pharmacy_items.description' LIKE '%query_here%'

このクエリはpharmacy_items、 I'm not using a で返されるはずのレコードではなく、テーブル内のすべてのレコードを返しますLEFT OUTER JOIN

WHERE返される結果が最初に句の前に満たされるようにクエリを作成するにはどうすればよいですかLEFT OUTER JOIN

4

1 に答える 1

3

これが欲しいようです:

SELECT *
  FROM pharmacy_items
  LEFT
 OUTER
  JOIN pharmacy_quantity_types
    ON pharmacy_items.quantity_type = pharmacy_quantity_types.id
 WHERE pharmacy_items.name LIKE '%query_here%'
    OR pharmacy_items.description LIKE '%query_here%'

pharmacy_itemsレコードに対する制限は、のWHERE節ではなく節の中にあります。LEFT OUTER JOINON

(以下にも注意してください:

  • ANDよりも優先順位が高いORので、a AND b OR Cつまり(a AND b) OR c、あなたが望んでいたと思いますa AND (b OR C)。上記のクエリb OR cは、句に移動することでこれを暗黙的に修正するため、とにかくWHERE分離されます。a
  • '...'はリテラル文字列であるため、'pharmacy_items.name'「実際の文字列pharmacy_items.name」を意味し、「レコードのnameフィールド」とは異なります。pharmacy_items後者はpharmacy_items.nameorと書かれて`pharmacy_items`.`name`います。)

)

于 2012-11-25T04:05:23.917 に答える