首页 > 解决方案 > 需要做一个有条件的 LIKE 请求

问题描述

在这里,我正在努力使用 SQL

我做了一个可以匹配sql中三个不同行的搜索栏。问题,其中一行与另外两行不在同一个表中。

这是一个例子

 TABLE 1 : topics
 id  ||  name        ||  category || id_merchant
 1   ||  football    ||  Sports   || 1
 2   ||  marmalade   ||  cooking  || 2
 3   ||  Hitchcock   ||  cinema   || 3

 TABLE 2 : merchant
 id || merchant
 1  || NIKE
 2  || Cooking Corp
 3  || GoodFilms Corp

此请求的问题(当我搜索“Corp”关键字时):

SELECT T.name, T.category, M.merchant 
FROM topics AS T, 
     merchant AS M 
WHERE T.name LIKE '%Corp%' 
   OR T.category LIKE '%Corp%' 
   OR M.merchant LIKE '%Corp%' 
  AND T.id_merchant = M.id

它返回所有名称为“Corp”的商家,但我只想检索一个商家与“Corp”匹配的主题

然后我尝试了这个:

SELECT T.name, T.category, M.merchant 
FROM topics AS T, 
     merchant AS M 
WHERE T.name LIKE '%Corp%' 
   OR T.category LIKE '%Corp%' 
   OR (SELECT M.merchant WHERE M.id = T.id_merchant) LIKE '%Corp%' 
  AND T.id_merchant = M.id

但它返回一个语法错误。

希望我足够清楚。

先感谢您!

标签: sqlsql-like

解决方案


如果您只想要商家名称中包含“公司”的主题。
那么这将是我猜的唯一标准?

SELECT T.name, T.category, M.merchant 
FROM topics AS T
INNER JOIN merchant AS M ON (M.id = T.id_merchant)
WHERE M.merchant LIKE '%Corp%'

请注意,JOIN 语法用于提高可读性。

顺便说一句,我注意到您喜欢使用 OR。所以建议,在使用 OR 和 AND 时最好使用括号。因为 AND 是在 OR 之前评估的。所以m OR n AND x OR y被评估为m OR (n AND x) OR y

因此,其他 OR 包括:

SELECT T.name, T.category, M.merchant 
FROM topics AS T
LEFT JOIN merchant AS M ON (M.id = T.id_merchant)
WHERE (
   M.merchant LIKE '%Corp%' OR 
   T.name LIKE '%Corp%' OR 
   T.category LIKE '%Corp%'
)

(样本数据并不真正需要)
(注意这次使用了 LEFT JOIN。这只是为了捕捉甚至没有商家的主题)


推荐阅读