我在这里用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
但是它返回语法错误。
希望我很清楚。
提前谢谢!
答案 0 :(得分:2)
如果您只想要商家名称中带有“ Corp”的主题。
那那是我猜的唯一标准吗?
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。这只是为了捕捉甚至没有商人的话题)