MySQL:选择仅包含列表中的元素及其组合的条目

标签 mysql sql

我有一个表,其中包含单个单词(例如 A、B 和 C)和复合词(例如 AB、AC 和 AD)。我想选择仅包含预定义单词列表中的单词的所有条目。

示例

id   word
--   -----
1    A
2    B
3    C
4    D
5    AB
6    AC
7    AD

给定列表 ('A','B'),我想选择单词 A、B 和 AB。也就是说,我想过滤掉除 A 或 B 之外的所有内容。

当我使用 SELECT * from table WHERE word in ('A','B'),我只得到A和B,没有复合AB。

当我使用 SELECT * from table WHERE word like '%A%' 或 word like '%B%' 时,我得到 A、B、AB、AC 和 AD。

基本上,我可以执行以下操作:

  • 第 1 步:从表中选择单词,其中单词不喜欢“%A%”且单词不喜欢“%B%”,返回 C 和 D。
  • 第 2 步:SELECT * from table WHERE word not like '%C%' and word not like '%D%',这会返回 A、B 和 AB。

但是,我不知道如何组合这两个查询。我读过有关子查询的内容,但它们不适用于 like 语句。

感谢您的帮助!

最佳答案

您似乎想要一个正则表达式。我认为:

where word regexp '^[AB]+'

这假设“单词”确实意味着“字母”。您可以将其修改为实际单词。

关于MySQL:选择仅包含列表中的元素及其组合的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54618430/

相关文章:

java - JdbcTemplate 的 SQL DELETE FROM 不起作用

mysql - 我还能做什么来优化这个查询?

php - Virtual Box MySQL Server VM 不断超时

mysql - 创建表上的外键未创建

mysql - MySQL 查询速度非常慢

php - SQL 查询未运行 - 无错误消息

php - 使用连接语法的动态 MySQL 记录集查询

php - 从一个表中选择表行,其中另一个表中表列的值为 x

java - 如何在 Play 中切换生产和开发数据库配置?

mysql - 选择表 A 中的所有项目(表 B 中已存在的项目除外)