我有一个查询,我必须匹配序列号,有时序列号是相同的,有时其中一个序列号有一个前面的'所以我必须考虑这两种情况。这是我要问的示例代码。
SELECT *
FROM table1 t1
JOIN table2 t2 ON t1.serial_number IN(concat('s', t2.serial_number), t2.serial_number);
如果我在JOIN中使用一个或另一个案例,则查询运行正常,但是当我使用这两个案例并进行解释时,它会进行全表扫描,使其变得非常缓慢。有任何想法吗?非常感谢帮助。
答案 0 :(得分:2)
你可以运行两个INNER JOINS。由于INNER只包含两个都给你命中的值,你不必担心重复,因为如果数据存在于一个中,那么它就不会存在于另一个中。
像这样:
SELECT * FROM table1 t1
INNER JOIN table2 t2a on t1.serial_number = t2a.serial_number
INNER JOIN table2 t2b on t1.serial_number = concat('s',t2b.serial_number)