如何根据另一个表中的 %LIKE% 值过滤表
Posted
技术标签:
【中文标题】如何根据另一个表中的 %LIKE% 值过滤表【英文标题】:How to filter a table based on %LIKE% values in another table 【发布时间】:2014-08-23 12:42:48 【问题描述】:所以我有tableA 和tableB。 A 是原始域数据,如http://www.cnn.com,其中 B 已将其整理得非常整洁,如 cnn.com。我需要提取不在 tableB 中但在 tableA 中的网站。我想在其中放置了一个带有一些疯狂的 %LIKE% 运算符的左连接。
这是我到目前为止所拥有的,但它不起作用。
SELECT tableA.domain, sum(tableA.views) views FROM `tableA` LEFT JOIN tableB ON tableA.domain %LIKE% tableB.name WHERE tableB.name IS NULL AND GROUP BY tableA.domain ORDER BY views DESC
谢谢!
【问题讨论】:
那么它是:mysql、sql 还是 sql-server?我们需要查看您的 2 个表结构(列名和类型)。并且“不起作用”?错误或不是您想要或期望的。 PS - 你加入平等的事物;然后你做一个 WHERE... LIKE... 【参考方案1】:试试这个
SELECT tableA.domain, sum(tableA.views) views FROM `tableA`
LEFT JOIN tableB ON tableA.domain LIKE CONCAT('%', tableB.name ,'%')
WHERE tableB.name IS NULL
GROUP BY tableA.domain
ORDER BY views DESC
您的尝试中有两个错误。
1- LIKE CONCAT('%', tableB.name ,'%')
// 你必须使用CONCAT
2- 删除group by
之前的AND
【讨论】:
那不只是提取完全匹配吗?我想看看是否有任何相似的价值观。 --> 在 http://www 中是“espn.com”。 espn .com? espn.com 只是一个例子,我有许多不同的域我试图筛选。您将如何使用 tableB 和 LIKE %...% 运算符应用于 tableA 以使其过滤类似值?谢谢! 我想我知道你的意思试试这个编辑过的答案。 我可能最终执行错了,但看起来确实正确。谢谢! 如果我要在 tableA 上设置 1000 的限制,我会怎么做呢?只需将 LIMIT 1000 添加到整个位的末尾?【参考方案2】:%
应该是您要比较的值,而不是 LIKE 关键字本身。
应该是这样的
SELECT column
FROM table
WHERE column LIKE '%pattern%';
【讨论】:
我可以像 '%tableB.name%' 一样添加它们吗?以上是关于如何根据另一个表中的 %LIKE% 值过滤表的主要内容,如果未能解决你的问题,请参考以下文章