sql - 需要做一个有条件的 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
但它返回一个语法错误。
希望我足够清楚。
先感谢您!
解决方案
如果您只想要商家名称中包含“公司”的主题。
那么这将是我猜的唯一标准?
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。这只是为了捕捉甚至没有商家的主题)
推荐阅读
- python - 如何在数值上优化协程的结果
- python - 如何暂停或睡眠或阻止声音设备的原始输入流
- reactjs - 模拟变化似乎没有很好地测试
- linux - bash -c 在同一进程中运行脚本
- excel - 在所有匹配的单元格之后将文本插入到 Excel 单元格中
- go - Goland中如何根据接口的动态类型设置条件断点
- vb.net - 如何将文本文件中的数据插入 VB.Net 中的二维数组?
- yocto - 如何为 yocto 项目在 beaglebone black 上启用 I2C2?
- c# - System.NotSupportedException:.Net Framework 不支持字符集“utf8mb3”
- azure-ad-b2c - Azure B2C 登录问题