如何在 mysql 中匹配两个 table

How to match two table in mysql

我想请问有没有"pratical"的解决方案可以匹配两个table...

例如,我有两个 table,供应和需求具有相同的列。 对于供应中的每一行 table,我想知道有多少需求与这些匹配,反之亦然。

编辑

示例table 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 列匹配

迈克尔 3 列中的第 1 列

Kimi 第 1 列,共 3 列

塞巴斯蒂安第 0 列,共 3 列

刘易斯第 1 列,共 3 列

如果可能,我还需要匹配的列数,因为我必须考虑只匹配超过 50%

现在我在级联上使用 AND/OR 并且使用 15/20 变量它不是顶部。

谢谢

我将尝试回答,但这是一个非常广泛的问题,尤其是如果您想考虑性能(如果两个 table 都很大,您将需要完全不同的解决方案)。

假设两个 table 的行数都很少,至少有两种方法,您是更频繁地查询,还是更频繁地查询 insert/update supply/demands .

假设 supply/demand 不经常更改,但您查询了很多次。一种方法是创建一个包含 3 个字段的 table,(例如 supply_demand_match):(supply_iddemand_id)作为 PK 和 score .根据您的示例,分数将为 0、1、2 或 3,或者百分比(共同字段数)。这样你就可以方便快捷的查询这个table。例如,要查找客户对笔记本 ID 95 感兴趣的内容:select demand_id from supply_demand_match where supply_id = 95 and score > 1(或 2,或 50%,或您决定得分的任何值)。

现在如何填写table?每次 insert/update 新供应或新需求时,您都需要 insert/update 所有相应的行。您可以使用您正在使用的任何脚本语言或纯 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 处理以计算每个可能的分数。这可能需要一段时间!

现在,如果您 insert/update 查询结果的频率比查询结果的频率高,则不需要将结果存储在 table 中,那样会适得其反。您可以将上述 SELECT 查询与 HAVING 子句结合使用,例如 HAVING score >= 2