我有两张桌子,比方说AllComputers和MfgComputers。 Allcomputers中有趣的列是Brand_Name,Model_Name和Model_Number。 Mfgcomputers中有趣的专栏是Product_Name。
我可以使用以下查询来显示Brand_Name为HP的所有行以及与Product_Name完全匹配的Model_Name或Model_Number。
select * from AllComputers,MfgComputers where AllComputers.Brand_Name='HP' AND AllComputers.Model_Number=MfgComputers.Product_Name OR AllComputers.Model_Name=MfgComputers.Product_Name;
我想匹配Brand_Name是HP的位置但使用LIKE或REGEX来匹配所有行,只有当两个匹配中包含至少三个连续数字时,Model_Number和Model_Name才匹配Product_Name。
因此,如果我将Model_Name作为HP Pavilion 500多功能一体机,将Product_Name作为HP 500多功能一体机,我只想返回两者都有500的匹配,而不是所有包含“全部”的所有匹配在一台电脑上。
我尝试使用LIKE来解析上述查询中的最后两个=符号,但仍然只匹配完全匹配,因为我不知道如何为整列添加外卡。
我知道如果只匹配一个特定的模型,我可以使用通配符,例如: 从AllComputers中选择*,其中Model_Number LIKE'%500%'; 要么 从AllComputers中选择*,其中Model_Number REGEXP'500';
但是,我想知道是否有可能在所有具有至少3个连续数字的模型匹配的列之间执行此操作。
答案 0 :(得分:0)
MySQL中的REGEXP具有数字通配符,因此请尝试REGEXP '.*[0-9][0-9][0-9].*'
。*相当于LIKE'%',因此实际上将两个%s之间的3个数字数字夹在中间。
答案 1 :(得分:0)
这将带回至少有三个连续数字的模型。
where Model_Number REGEXP '[0-9]{3}'
根据您的评论更新:
select * from
AllComputers, MfgComputers
where
AllComputers.Brand_Name='HP' AND
AllComputers.Model_Number REGEXP '[0-9]{3}' -- missing AND/OR here
MfgComputers.Product_Name OR -- make sure you are grouping using () for this OR
AllComputers.Model_Name REGEXP '[0-9]{3}' -- missing AND/OR here
MfgComputers.Product_Name;