我有以下两个表,我想内部连接的基础上,每个列的内容在两个表的一部分是等于一个值。在下面的例子中,我想内部连接两个表,我加入所有行,其中包括“B”在组列。
------------------------
First table TABLE1:
Group Name
------------------------
A,B,C,D,E CustomerNameA...
G,E,D,L,P CustomerNameB...
A,B,C,D,E CustomerNameC...
...
------------------------
Second table TABLE2
Group Device
------------------------
A,Z CustomerDeviceA...
A,B,C CustomerDeviceB...
Z,P,O CustomerDeviceC...
B,C,E CustomerDeviceD...
...
我不能使用
...
JOIN TABLE2
On TABLE1.Group like Concat('%', TABLE2.Group,'%')
因为“B”在TABLE1.Group和TABLE2.Group中的位置不稳定。“B”在两列中的某个地方。我试过:
...
JOIN TABLE2
On (TABLE1.Group like '%B%' AND TABLE2.Group like '%B%')
但它返回的结果与预期的不同。
2条答案
按热度按时间1bqhqjot1#
你的问题缺乏足够的细节来提供一个单一的,准确的答案。
下面的查询是为SQL Server编写的,但概念应该很容易转换为MySQL。
我们将从输入开始:
这将给予您所有的数据,由“包含B”和“不包含B”连接:
这将给予所有数据,显示由“contains B”连接的行和其他不匹配的行。
这将给予您仅由“contains B”连接的行。
https://dbfiddle.uk/gANc7olQ
mpbci0fu2#
“我不能用”
是的。但任务是:
在下面的例子中,我想内部连接两个表,我加入所有行,其中包括“B”在组列。
因此,您对所有具有
B
的项目感兴趣。因此,您可以使用用途:诀窍是我在
Group
的值前面加上一个逗号,这样对于CONCAT
的结果来说,任何这样的字段,B
或其他任何东西,如果出现在这个结果中,那么它将在两个逗号之间,这也处理了可变子串长度的问题。