我想问是否有一个“实用”的解决方案来匹配两个表...
例如,我有两个表,供应和需求,具有相同的列。 对于供应表中的每一行,我想知道有多少需求与这些行匹配,反之亦然。
编辑
示例表 sypply
id Manufacturer Cpu Ram Hdd
95 acer i3 4gb 500gb
96 acer i5 4gb 1tb
97 hp i3 8g 500gb
98 sony i7 4gb 500gb
99 samsung i3 8g 750gb
以及餐 table 需求
id customer Cpu Ram Hdd
61 John i3 8gb 500gb
62 Michael x6 4gb ssd
63 Kimi i3 16gb 1tb
64 Sebastian x4 16gb 1tb
65 Lewis i5 16gb 500gb
我想知道对 ID 95 的笔记本感兴趣的客户
John 有 3 列中的 2 列匹配
Michael 第 1 栏(共 3 栏)
Kimi 第 1 列(共 3 列)
塞巴斯蒂安第 0 列,共 3 列
刘易斯第 1 列(共 3 列)
如果可能,我还需要匹配的列数,因为我必须考虑仅匹配超过 50%
现在我在级联上使用 AND/OR,并且对于 15/20 变量,它不是顶部。
谢谢
最佳答案
我将尝试回答,但这是一个非常广泛的问题,特别是如果您想考虑性能(如果两个表都很大,则需要完全不同的解决方案)。
假设两个表的行数都很少,那么至少有两种方法,无论您是更频繁地查询,还是更频繁地插入/更新供应/需求。
假设供给/需求不经常变化,但您查询了很多次。一种方法是创建一个表(例如 supply_demand_match
),其中包含 3 个字段:(supply_id
、demand_id
)作为 PK 和得分
。根据您的示例,分数将为 0、1、2 或 3,或百分比(公共(public)字段数)。这样你就可以方便快捷地查询这个表。例如,要查找客户对 ID 95 的笔记本感兴趣的内容:select Demand_id from Supply_demand_match where Supply_id = 95 and Score > 1
(或 2、或 50%,或您决定获取分数的任何值) .
现在如何填写这个表?每次插入/更新新的供应或新的需求时,您都需要插入/更新所有相应的行。您可以使用您使用的任何脚本语言或纯 SQL 中的脚本来完成此操作(如果您愿意,可以使用触发器)。例如,这样的事情应该有效:
INSERT INTO supply_demand_match (supply_id, demand_id, score) ( SELECT supply.id, demand.id, IF(supply.Cpu = demand.Cpu, 1, 0) + IF (supply.Ram = demand.Ram,1,0) + ... as score FROM supply JOIN demand WHERE ... )
请注意,连接没有连接条件,因此MySQL将处理每个行组合以计算每个可能的分数。这可能需要相当长的时间!
现在,如果您插入/更新的次数多于查询结果的次数,则不需要将结果存储在表中,否则会适得其反。您可以将上述 SELECT
查询与 HAVING
子句结合起来,例如 HAVING Score >= 2
关于mysql - mysql中如何匹配两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084748/