2017-03-10 80 views
-1

如何从两个表使用LIKE语句

匹配表

CREATE TABLE matching (
    ID INT, 
    Name varchar(20) 
); 

INSERT INTO matching(ID,name) VALUES (1,'Child'),(2,'GrandChild'),(3,'parent') 

得到匹配的记录TreeMatching

CREATE TABLE Treematching (
    ID INT, 
    Name varchar(20) 
); 

INSERT INTO Treematching(ID,name) VALUES 
(1,'Child-Foster'), 
(2,'Child-Filly'), 
(3,'Child-Ricky'), 
(4,'GRandchild-Filmy'), 
(5,'GRandchild-Freaky'), 
(6,'GRandchild-Frim'), 
(7,'Frim'), 
(8,'None'), 
(9,'parent-John') 

如何获得如何获得唯一的匹配记录来自树匹配表的匹配记录

输出:

ID Name    TName 
1 Child   Child-Foster 
2 Child   Child-Filly 
3 Child   Child-Ricky 
4 GRandchild  GRandchild-Filmy 
5 GRandchild  GRandchild-Freaky 
6 GRandchild  GRandchild-Frim 
9 parent   parent-John 

如何使用像我一直在使用CONCAT试图语句来得到相同的记录。

+0

你到目前为止试过了什么? –

+0

在join和concat函数中使用like语句 – mohan111

+0

您使用的是MySQL还是MS SQL Server?他们的LIKE的不完全兼容... – jarlh

回答

1

如果你使用SQL Server,你可以尝试类似的东西:

SELECT 
    t.ID, 
    m.Name, 
    t.Name 
FROM matching AS m 
INNER JOIN Treematching AS t 
ON t.Name LIKE '%'+m.Name+'%' 

如果您使用MySQL服务器,请尝试以下操作:

SELECT 
    t.ID, 
    m.Name, 
    t.Name 
FROM matching AS m 
INNER JOIN Treematching AS t 
ON t.Name LIKE CONCAT('%',m.Name,'%') 

关于MySQL版本,请查看以下链接。

sqlfiddle

+0

简单的事情我已经使复杂..谢谢回答 – mohan111

+0

@ mohan111不客气! – Christos

0

您也许能够做这样的事情(未测试,我没有一个SQL服务器实例):

SELECT M.Id, M.Name, T.Name 
    FROM matching AS M 
     INNER JOIN Treematching AS T 
      ON M.Name LIKE T.Name + '%'; 
0

尝试下面的查询,

SELECT TM.ID,M.Name,TM.Name 
FROM @matching AS M 
    INNER JOIN @Treematching AS TM ON TM.Name LIKE M.Name+'%' 
0
SELECT A.ID, 
    B.NAME, 
    A.NAME AS TNAME 
    FROM TREEMATCHING A 
    INNER JOIN MATCHING B ON A.NAME LIKE B.NAME+'%' 



    ID   NAME     TNAME 
----------- -------------------- -------------------- 
1   Child    Child-Foster 
2   Child    Child-Filly 
3   Child    Child-Ricky 
4   GrandChild   GRandchild-Filmy 
5   GrandChild   GRandchild-Freaky 
6   GrandChild   GRandchild-Frim 
9   parent    parent-John