MySQL SELECT字符串操作

时间:2015-03-23 12:38:01

标签: mysql sql

我有这个SQL SELECT:

SELECT DISTINCT id, name FROM products 
WHERE (translation IS NULL OR translation = '') LIMIT 500

现在我想将查询结果限制为其中name包含来自第二个查询的字符串的行:

SELECT DISTINCT matches FROM sorting

我知道我可以将字符串与名称LIKE'%XXX%'进行比较,但如何一次性比较第二个查询的所有结果?

最后,一些匹配实际上是2个独立的字符串,需要单独进行比较。例如"大|"意味着该名称应与" big"进行比较。和"大"分开。

这有可能吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以加入这两个表,然后使用IN子句。像

这样的东西
SELECT DISTINCT id, name FROM products join sorting on sorting.someid = products.someid
WHERE (translation IS NULL OR translation = '') and matches in (SELECT DISTINCT matches FROM sorting)
LIMIT 500

修改: -

如果要搜索模式,还要添加,则可以使用REGEX,但需要在值中找到该模式。如果你没有任何模式,那么我认为没有任何方法可以匹配它。

答案 1 :(得分:0)

LIKE用作JOIN条件:

SELECT DISTINCT id, name
FROM products JOIN sorting ON name LIKE '%' || matches || '%'
WHERE (translation IS NULL OR translation = '')
LIMIT 500

也许MySQL想要concat('%',matches,'%')而不是ANSI SQL的||来进行连接。