0

我正在创建一个搜索功能。我的 sql 查询在 where 子句中使用LIKEand 。OR LIKE我正在搜索的表中的一个字段被调用quantity_types,它只存储与另一个表中找到的值相对应的代码。因此,要从另一个检索值,我想Left Outer Join在查询中使用 a 。

这是我的示例代码:

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表中的所有记录,而不是那些应该返回的记录,我没有使用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 JOIN'sON子句中。

(另请注意:

  • 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.name`pharmacy_items`.`name`。)

)

于 2012-11-25T04:05:23.917 回答