如何使用like / like之类的左外连接

时间:2012-11-25 04:01:18

标签: mysql sql

我正在创建一个搜索功能。我的SQL查询在where子句中使用LIKEOR LIKE。我正在搜索的表中的一个字段称为quantity_types,其中只存储与另一个表中找到的值对应的代码。因此,要从另一个中检索值,我想在查询中使用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表中的所有记录,而不是那些应该返回的记录,我没有使用LEFT OUTER JOIN

如何构建查询,使得返回的结果是WHERE

之前首先满足LEFT OUTER JOIN子句的结果

1 个答案:

答案 0 :(得分: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的{​​{1}}条款中。

(另请注意:

  • ON的优先级高于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'”,它与{{1}的pharmacy_items.name字段不同记录“。后者写成namepharmacy_items。)