如何将具有多个值的 WHERE IN 子句转换为 RegExp 或 Like
How to convert WHERE IN clause with multiple values to RegExp or Like
我想转换这个:
SELECT id,songTitle,artistName, trackId
FROM songs
WHERE (songTitle, artistName) IN (('come together', 'the beatles'),('all the small things', 'blink-182'))
类似这样但我不知道正确的语法:
SELECT id,songTitle,artistName, trackId
FROM songs
WHERE (songTitle, artistName) IN LIKE (('%come together%', '%the beatles%'),('%all the small things%', '%blink-182%'))
除非我同时搜索 100 多首歌曲。我们也可以使用 REGEXP 我只是不知道其中任何一个的正确语法。
WHERE (a,b) IN ((1,2), ...)
优化很差。
LIKE
中的前导通配符阻止使用索引。
- 你不能做你尝试的构造。
所以,抛开性能,让我们看看如何执行任务:
WHERE ( songTitle LIKE '%come together%' AND artistName LIKE '%the beatles%')
OR ( .... )
OR ...
抱歉,没有捷径。
REGEXP 无法提供帮助在这种情况下。
FULLTEXT
索引是需要考虑的事情,但我认为它在这个例子中没有帮助。
我想转换这个:
SELECT id,songTitle,artistName, trackId
FROM songs
WHERE (songTitle, artistName) IN (('come together', 'the beatles'),('all the small things', 'blink-182'))
类似这样但我不知道正确的语法:
SELECT id,songTitle,artistName, trackId
FROM songs
WHERE (songTitle, artistName) IN LIKE (('%come together%', '%the beatles%'),('%all the small things%', '%blink-182%'))
除非我同时搜索 100 多首歌曲。我们也可以使用 REGEXP 我只是不知道其中任何一个的正确语法。
WHERE (a,b) IN ((1,2), ...)
优化很差。LIKE
中的前导通配符阻止使用索引。- 你不能做你尝试的构造。
所以,抛开性能,让我们看看如何执行任务:
WHERE ( songTitle LIKE '%come together%' AND artistName LIKE '%the beatles%')
OR ( .... )
OR ...
抱歉,没有捷径。
REGEXP 无法提供帮助在这种情况下。
FULLTEXT
索引是需要考虑的事情,但我认为它在这个例子中没有帮助。