MySQL多表之间的多LIKE查询

3
我已经搜索了解决方案,但到目前为止我还没有找到。

所以这里是问题,假设我有2个表:

表1

name | code
-------------------
a    | [a][b][c]
b    | [a][c][d]
c    | [a][e]

Table2(表格2)
code | name
-------------------
a    | aaaa
b    | bbbb
c    | cccc
d    | dddd
e    | eeee

我想要进行多选,选择Table1.nameTable2.name,其中Table1.code LIKE '%b%'或者Table1.code LIKE '%e%'。因此结果应该是这样的:
name | name
------------------
a    | aaaa
c    | cccc

我确实尝试了:
SELECT Table1.name, Table2.name 
FROM Table1, Table2 
WHERE Table1.code LIKE '%b%' OR Table1.code LIKE '%e%'

但它没有起作用。我是一个新手,在这方面需要任何帮助,非常感谢 :)

1
这两个表之间有什么连接? - 0x_Anakin
table1.code 是 table2.code 的外键。 - Spica
3个回答

2
SELECT t1.name, t2.name FROM 
Table1 t1 INNER JOIN Table2 t2 ON (t1.name = t2.code)
WHERE t1.code LIKE '%b%' OR t1.code LIKE '%e%'

由于这是一个内连接,只有在第二个表中存在匹配的代码时,才会返回来自第一个表的行。如果您想显示Table1中的任何匹配行,请使用LEFT JOIN。


谢谢你的回答,我使用了你上面的代码,但是它返回了零个结果。当我将INNER JOIN更改为LEFT JOIN时,它在t2.name中显示NULL...嗯...或者t1.code必须与t2.code完全相同吗? - Spica
不,我使用了您上面的示例,并将其应用到我的数据(表名、字段等不同),我认为它没有起作用是因为Table1.code的值与Table2.code并不完全相同。顺便说一句,感谢您的答案,它给了我启示。 - Spica

2
为了使用“like”函数或“instr”函数连接两个表,以下是使用“like”的方法:

使用"like"

 **column_name1 like '%'column_name2'%'**

使用"instr"

 **instr(column_name1,column_name2)>0**

在你的例子中,尝试使用以下语句:

其中column_name1是引用列column_name2是你要搜索的模式

使用like语句:

SELECT Table1_name, Table2_name FROM 
( SELECT Table1.name table1_name
        ,Table1.code table1_code
        ,Table2.name table2_name
        ,Table2.code table2_code
FROM Table1 JOIN Table2 ON  
(Table2.name LIKE '%'||Table1.name||'%') OR (Table1.code LIKE '%'||Table2.code||'%')
WHERE Table1.name=Table2.code
)  new1
 WHERE Table1_code LIKE '%b%' OR Table1_code LIKE '%e%'

Using INSTR

 SELECT Table1_name, Table2_name FROM 
( SELECT Table1.name table1_name
        ,Table1.code table1_code
        ,Table2.name table2_name
        ,Table2.code table2_code
FROM Table1 JOIN Table2 ON
INSTR(Table2.name,Table1.name)>0   OR INSTR(Table1.code,Table2.code)>0 
WHERE Table1.name=Table2.code
)  new1
 WHERE Table1_code LIKE '%b%' OR Table1_code LIKE '%e%'

哇,你的代码真的让我很开心,它像我想要的那样工作。非常感谢。 - Spica

0
如果我没记错的话,像这样的代码应该适合你的需求:
SELECT * FROM table1 AND table2 WHERE table1code LIKE '%e%'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接