DESCRIBE tablea; +--------6ren">
gpt4 book ai didi

mysql - 使用 MySQL "NOT IN"但允许子字符串

转载 作者:行者123 更新时间:2023-11-29 01:38:56 25 4
gpt4 key购买 nike

我正在尝试查询不在另一组行中的行。但是,另一组行可能包含包含第一个表中的字符串的字符串。

我在解释时弄糊涂了,所以我将使用以下示例表:

mysql> DESCRIBE tablea;
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| name | char(40) | NO | PRI | | |
+------------+----------+------+-----+---------+-------+

mysql> DESCRIBE tableb;
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| nametag | char(40) | NO | PRI | | |
+------------+----------+------+-----+---------+-------+

mysql> SELECT name FROM tablea;
+------------+
| name |
+------------+
| cat |
| dog |
| cow |
+------------+

mysql> SELECT nametag FROM tableb;
+------------+
| nametag |
+------------+
| wolf |
| dog |
| browncow |
+------------+

我试图找到一种类似于 NOT IN 操作的方法,但是因为 cow “在” browncow 中,我也想排除这个值。

mysql> SELECT name FROM tablea WHERE name NOT IN ( SELECT nametag FROM tableb );
+------------+
| name |
+------------+
| cat |
| cow |
+------------+
# I am looking for something that would only return "cat" for this example.

是否有任何操作可以搜索未包含在具有附加修饰符的另一个集合中的行?

最佳答案

您可以使用反连接模式,使用 LIKE 谓词进行匹配。 (反连接是一个外部连接,返回一个表中的所有行,以及另一个表中的匹配项,然后一个谓词排除具有一场比赛

  SELECT a.name
FROM tablea a
JOIN tableb b
ON b.nametag LIKE CONCAT('%',a.name,'%')
WHERE b.nametag IS NULL

(a 中的任何行与 b 中的匹配行......b 中的行将具有非 NULL 值. 或者,换句话说...... a 中的行在 b 中没有匹配的行,而 中的列将具有 NULL 值b.)

如果 a 中有一行具有 name='cow',而 b 中有一行具有 nametag= 'browncow',这些行将匹配。

aname='cat' 的行只有在字符串 'cat' 没有出现在任何b.nametag 的值。

注意:百分号和下划线字符是LIKE 谓词中的通配符。如果你想对这些字符进行匹配,你需要用反斜杠“转义”它们。使用 REGEXP 匹配也有类似的问题,但更多可能的恶作剧字符。


还有其他查询模式将返回等效结果。

例如:

  SELECT a.name
FROM tablea a
WHERE NOT EXISTS
( SELECT 1
FROM tableb b
WHERE b.nametag LIKE CONCAT('%',a.name,'%')
)

就我个人而言,我更喜欢反加入模式。

关于mysql - 使用 MySQL "NOT IN"但允许子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31486141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com