从表中选择不在另一个字符串长度

时间:2016-08-17 14:08:33

标签: mysql

在db MySQL中,我有两个表 xxx1 ,58行, xxx2 ,71行。

这两个表格相似,因为在 xxx1 xxx2 的列name中我可以使用例如:

  

VIETNAM 1/35 KHE SANH GUN POSITION BUNKER(

xxx2

上的

  

VIETNAM 1/35 KHE SANH GUN POSITION BUNKER(I)RESIN MODEL KIT

xxx1

上的

如果在 xxx1 表上尝试此查询,则输出正确无误:

mysql> SELECT
    *
FROM
    `xxx1` r
WHERE
    r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%';
+----+----------------------------------------------------------+
| id | name                                                     |
+----+----------------------------------------------------------+
| 30 | VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE RESIN MODEL KIT |
+----+----------------------------------------------------------+
1 row in set

现在我需要从表中选择不在另一个表中的行,我尝试了这个查询,但输出为空:

mysql> SELECT
    l.*
FROM
    xxx2 l
WHERE
    NOT EXISTS (
        SELECT
            NULL
        FROM
            xxx1 r
        WHERE
            r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%'
    );
Empty set

有什么问题?

如何解决这个问题?

你能帮助我吗?

提前谢谢。

3 个答案:

答案 0 :(得分:1)

由于r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%'将根据问题返回一行,因此xxx2中的所有记录的not exists子句都将为false,因此会生成一个空结果集。

如果你想知道xxx2中的哪条记录在xxx1中没有相应的记录,其中xxx2内容是xxx1中内容的开头,那么使用带有is null条件的左连接:

select xxx2.name
from xxx2
left join xxx1 on xxx2.name=left(xxx1.name,char_length(xxx2.name))
where xxx1.name is null

答案 1 :(得分:0)

试试这个

        SELECT
    l.*
FROM
    xxx2 l
WHERE
    NOT EXISTS (
        SELECT
            r.name
        FROM
            xxx1 r
        WHERE
            r.name LIKE concat('%',l.name,'%')
    );

答案 2 :(得分:0)

SELECT l.*
FROM xxx2 l
UNION
SELECT r.*
FROM xxx1 r where r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%'