如何在MYSQL中组合IN操作和LIKE操作?
在我的例子中,我希望找到包含特定子字符串的重复记录。例如,我有P123和123。我正在删除P以找到重复记录123。然后,我想找到包含 123的所有记录。
我有下面的MySQL查询,但我不知道如何添加通配符搜索。
SELECT *
FROM table
WHERE field IN
(
SELECT * FROM
(
SELECT REPLACE(REPLACE(`field`,'T',''),'P','') as x
FROM table
GROUP BY x
HAVING COUNT(*) > 1
) AS subquery
)发布于 2020-02-12 23:43:26
你不需要通配符。只需在联接列上应用与suqbuery中相同的转换:
SELECT *
FROM table
WHERE REPLACE(REPLACE(`field`,'T',''),'P','') IN (
SELECT REPLACE(REPLACE(`field`,'T',''),'P','') as x
FROM table
GROUP BY x
HAVING COUNT(*) > 1
)请注意,如果您运行的是MySQL 8.0,您也可以使用窗口函数来实现这一点,这提供了一个更短的查询,并且可能更有效:
SELECT *
FROM (
SELECT
t.*,
COUNT(*) OVER(PARTITION BY REPLACE(REPLACE(`field`,'T',''),'P','')) cnt
FROM table
) t
WHERE cnt > 1发布于 2020-02-12 23:49:36
您可以使用子查询来连接,而不是使用IN。
SELECT DISTINCT t1.*
FROM table as t1
JOIN (
SELECT REPLACE(REPLACE(`field`,'T',''),'P','') as x
FROM table
GROUP BY x
HAVING COUNT(*) > 1
) AS t2 ON t1.field LIKE CONCAT('%', t2.x, '%')请注意,搜索子字符串意味着它将不匹配确切的数字。如果您正在寻找包含123的记录,您将匹配P1234、P1123等。如果您只想匹配完全相同的数字,则GMB的答案将更好(您也可以使用JOIN来实现这一点)。
https://stackoverflow.com/questions/60198492
复制相似问题