MySQL根据第二个表中的匹配信息从表中选择信息

标签 mysql

我遇到了一个问题,很难找到解决方法。我正在使用 MySQL,看看它是否适合我工作的公司,到目前为止,我对其功能感到非常兴奋。然而,我遇到了困难,我希望这里有人可以帮助我!

我的数据库中有两张表,一张用于承包商,另一张用于贷款号码。我的承包商表包含他们的姓名、联系方式以及他们愿意从事工作的领域等信息。这些区域按(县、州)格式化,如果有多个区域,则将它们分开,如下所示:

安妮阿伦德尔,医学博士;巴尔的摩,医学博士;卡尔弗特,医学博士;

然而,一些承包商愿意在整个州范围内开展工作。对于这种情况,还有另一列标记为 states,其格式如下:

弗吉尼亚州;俄亥俄州;宾夕法尼亚州;

我的贷款表包含一个贷款编号、上面的(县、州)(但任何给定贷款只有一个条目),以及第三个州列,该列是多余的,可能会被删除。

我一直在编写一个程序来管理我们所有的承包商和贷款号码,并且我需要能够生成可以为任何给定贷款号码工作的承包商列表。这是我迄今为止使用过的查询:

SELECT first_name, last_name FROM contractors INNER JOIN loans ON contractors.county_state LIKE CONCAT('%', loans.county_state, ';%') WHERE loans.loan_number = <LOAN NUMBER GOES HERE>

这很有效,但它无法与覆盖整个州的承包商相匹配。我如何在其中添加诸如 OR 条款之类的内容以包括全州范围的承保承包商?

OR contractors.states LIKE CONCAT('%', loans.state, ';%')

这样的事情可能吗,还是我必须改变方向?

预先感谢您的帮助!

最佳答案

您可以使用名为 FIND_IN_SET 的函数,该函数可以在逗号分隔的值列表中查找值。在这种情况下,您必须将 ; 替换为 ,

SELECT first_name, last_name 
FROM contractors 
INNER JOIN loans 
ON contractors.county_state LIKE CONCAT('%', loans.county_state, ';%') 
OR FIND_IN_SET(contractors.county_stat, REPLACE(loans.states, ';', ','))
WHERE loans.loan_number = <LOAN NUMBER GOES HERE>

但这效率不高,并且存在其他问题(例如需要调整字段大小以接受最大数量的状态,并且无法使用索引快速访问数据)。最好将数据拆分为单独表中的多行

关于MySQL根据第二个表中的匹配信息从表中选择信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32186784/

相关文章:

mysql - 如何将 Homebrew 安装的 mysql-client 与 diesel-cli 链接起来?

mysql - SQL 查询选择除 'ignore_table' 中定义的记录之外的整个表

mysql - 有没有可能加速MySQL的 "Updating Reference Tables"线程状态?

mysql - 从 EC2 上的不同实例访问 mysql 数据库

mysql - 返回第 2 列不唯一的 ID。

php - 将值从一个数据库更新到另一个数据库 - 最快的方法

c# - Windows Phone 8 中使用的数据库

php - 在 freeBSD 上设置 PHP 与 MySQL 一起工作?

mysql - 从 MySQL 中选择表的最后 N# 列

java - Hibernate 和 MariaDB auto_increment 未通过级联正确设置 FK