我有这个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"进行比较。和"大"分开。
这有可能吗?
谢谢!
答案 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的||
来进行连接。