mysql - 从 2 个独立的 mysql 表中获取复合数据

标签 mysql

我想从两个不同或独立的表中获取复合数据。 这是我的表格结构。

表 1:

CREATE TABLE `keywords` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `keyword` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE KEY `keyword` (`keyword`)
)

此表中的数据如下:

+----+---------+
| id | keyword |
+----+---------+
|  2 | apple   |
|  1 | Banana  |
|  8 | ginger  |
|  6 | grapes  |
|  7 | guava   |
| 10 | milk    |
|  3 | onion   |
|  4 | potato  |
|  9 | tea     |
|  5 | tomato  |
+----+---------+

表2;

CREATE TABLE `Rfps` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `subject` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
)

此表中的数据如下:

+----+----------------------------------+
| id | subject                          |
+----+----------------------------------+
|  1 | I would like to have some banana |
|  2 | I need some tea                  |
|  3 | I like grapes                    |
|  4 | yes. Beer, Banana, Onion         |
|  5 | capsicum                         |
+----+----------------------------------+

我的 Moto 是获取表 2 中具有表 1 关键字的主题的 ID。

我创建了一个查询:

select * from Rfps where CONCAT(subject) REGEXP (select GROUP_CONCAT(keyword SEPARATOR '|') as keyword from keywords);

结果如下:

+----+----------------------------------+
| id | subject                          |
+----+----------------------------------+
|  1 | I would like to have some banana |
|  2 | I need some tea                  |
|  3 | I like grapes                    |
|  4 | yes. Beer, Banana, Onion         |
|  5 | capsicum                         |
+----+----------------------------------+

但没有得到关键字的id,或者关键字。

但是如果我像这样获取:

select Rfps.id,Rfps.subject,keywords.id,keywords.keyword from Rfps,keywords where CONCAT(subject) REGEXP (select GROUP_CONCAT(keyword SEPARATOR '|') as keyword from keywords);

这是给数据作为:

+----+----------------------------------+----+---------+
| id | subject                          | id | keyword |
+----+----------------------------------+----+---------+
|  1 | I would like to have some banana |  2 | apple   |
|  2 | I need some tea                  |  2 | apple   |
|  3 | I like grapes                    |  2 | apple   |
|  4 | yes. Beer, Banana, Onion         |  2 | apple   |
|  1 | I would like to have some banana |  1 | Banana  |
|  2 | I need some tea                  |  1 | Banana  |
|  3 | I like grapes                    |  1 | Banana  |
|  4 | yes. Beer, Banana, Onion         |  1 | Banana  |
|  1 | I would like to have some banana |  8 | ginger  |
|  2 | I need some tea                  |  8 | ginger  |
|  3 | I like grapes                    |  8 | ginger  |
|  4 | yes. Beer, Banana, Onion         |  8 | ginger  |
|  1 | I would like to have some banana |  6 | grapes  |
|  2 | I need some tea                  |  6 | grapes  |
|  3 | I like grapes                    |  6 | grapes  |
|  4 | yes. Beer, Banana, Onion         |  6 | grapes  |
|  1 | I would like to have some banana |  7 | guava   |
|  2 | I need some tea                  |  7 | guava   |
|  3 | I like grapes                    |  7 | guava   |
|  4 | yes. Beer, Banana, Onion         |  7 | guava   |
|  1 | I would like to have some banana | 10 | milk    |
|  2 | I need some tea                  | 10 | milk    |
|  3 | I like grapes                    | 10 | milk    |
|  4 | yes. Beer, Banana, Onion         | 10 | milk    |
|  1 | I would like to have some banana |  3 | onion   |
|  2 | I need some tea                  |  3 | onion   |
|  3 | I like grapes                    |  3 | onion   |
|  4 | yes. Beer, Banana, Onion         |  3 | onion   |
|  1 | I would like to have some banana |  4 | potato  |
|  2 | I need some tea                  |  4 | potato  |
|  3 | I like grapes                    |  4 | potato  |
|  4 | yes. Beer, Banana, Onion         |  4 | potato  |
|  1 | I would like to have some banana |  9 | tea     |
|  2 | I need some tea                  |  9 | tea     |
|  3 | I like grapes                    |  9 | tea     |
|  4 | yes. Beer, Banana, Onion         |  9 | tea     |
|  1 | I would like to have some banana |  5 | tomato  |
|  2 | I need some tea                  |  5 | tomato  |
|  3 | I like grapes                    |  5 | tomato  |
|  4 | yes. Beer, Banana, Onion         |  5 | tomato  |
+----+----------------------------------+----+---------+

重复行。

最佳答案

CONCAT() 将字符串放在一起。仅在一列上使用它是无用的,并且会阻止索引的潜在使用。
正则表达式也太矫枉过正了。请改用 LIKE

这个查询给出了正确的结果:

select
*
from
keywords k 
join Rfps r on r.subject like concat('%', k.keyword, '%');

关于mysql - 从 2 个独立的 mysql 表中获取复合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43086290/

相关文章:

mysql - 2个表之间的简单关系

mysql - 我需要一些帮助来优化查询

MySQL VS Postgres/POSTGIS 空间数据库支持

mysql - 获取总消耗

php - 使用 laravel 按纬度和经度搜索

mysql - 如何在 MYSQL 数据库表的列中仅插入 Null 集的值

mysql - 如何对 MYSQL 中的字母数字列进行排序?

PHP 分页查询不起作用

数据库中的 HTML 标记不起作用

mysql - InnoDB mySQL 无法设置 "ON DELETE SET DEFAULT' 。如何设置?