mysql - 根据另一个表的 'similar' 值从一个表中检索记录

标签 mysql sql select

我正在尝试提出一种选择语法,用于根据另一个不相关表 (A) 的“相似”值从一个表 (B) 中检索记录。

有两个表:

TABLE_A
ID  CODE    COMPANY
1   234     XYZ Corporation, LLC
2   142     Corp ABC Enterprise, S.L.D.
3   145     Z. Incorporated, GmBH
4   134     XYZ Corporation, LLC
5   741     Z. Incorporated, GmBH
6   952     Corp ABC Enterprise, S.L.D.

TABLE_B
ID  COMPANY
1   XYZ Corporation
2   Z. Incorporated
3   Corp ABC Enterprise
4   Just another Company

我需要从 TABLE_A 中现有的条件中提取 TABLE_B.COMPANY 字段。例如,如果搜索条件为 CODE=234,我需要 TABLE_B 中的结果“XYZ Corporation”。

TABLE_A 包含重复的公司,而 TABLE_B 没有。

到目前为止我有这个:

SELECT DISTINCT T1.COMPANY
FROM TABLE_A T1 WHERE EXISTS
(SELECT 1 FROM 
(SELECT CONCAT(T2.COMPANY, '%') AS Company FROM TABLE_B T2) c 
WHERE T1.COMPANY LIKE Company AND T1.CODE='234';

这会产生结果“XYZ Corporation, LLC”,而我需要“XYZ Corporation”。也就是说,我需要像 SELECT T2.COMPANY FROM ... 这样的东西,这显然不起作用,因为该变量对于第一个 SELECT 来说是未知的。

谢谢!

最佳答案

您需要使用 join 而不是 exists 来从 table_b 获取行:

SELECT DISTINCT T2.COMPANY
FROM TABLE_A T1 JOIN
     TABLE_B T2
     ON T1.COMPANY LIKE CONCAT(T2.COMPANY, '%') AND T1.CODE = '234'

关于mysql - 根据另一个表的 'similar' 值从一个表中检索记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22537710/

相关文章:

mysql - 使用 LAMP 堆栈备份和恢复 LXC 容器 - MySQL 无法在容器中启动

php - 时间戳为 15 天以上的 SQL 查询

javascript - mySQL:如果文本列包含黑名单上的项目,则选择行

Mysql 磁盘空间已满,等待有人释放空间

mysql - 在外语字段上使用 ORDER BY 子句

javascript - 如何限制 HTML Select 元素下拉菜单中显示的选项数量?

python - 难以在 Lion 上安装 MySQLdb - 导入找不到模块

mysql - 在 MySql Select 中显示列值两次

mysql - Like 运算符中的变量或内部选择?

mysql - Rails mysql - 1 个查询中有 2 个计数