我正在创建一个搜索功能。我的SQL查询在where子句中使用LIKE
和OR 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
子句的结果
答案 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
字段不同记录“。后者写成name
或pharmacy_items
。))