我不完全确定如何问这个问题,所以我将首先提供一个示例表和一个示例输出,然后对我试图实现的目标进行更彻底的解释。
想象一下,我有两张桌子。第一个是公司列表。其中一些公司由于从不同来源导入并不断更新,因此存在重复条目。例如,公司表可能看起来像这样:
| rawName | strippedName |
| Kohl's | kohls |
| kohls.com | kohls |
| kohls Corporation | kohls |
因此,在这种情况下,我们有来自三个不同来源的信息。为了让我的程序了解这些源都是同一个商店,我创建了剥离名称列(我也用它来创建URL之类的)。
在第二张表中,我们有关于交易、优惠券、运输优惠等的信息。然而,由于这些信息来自不同的来源,因此最终得到了我们在上面确定的三个不同的rawName。例如,第二个表可能看起来像这样:
| merchantName | dealInformation |
| kohls.com | 10% off everything... |
| kohl's | Free shipping on... |
| kohls corporation | 1 Day Flash Sale! |
| kohls.com | Buy one get one... |
这里我们有四个条目,它们都来自同一家公司。然而,当网站上的用户访问Kohls的列表时,我希望它显示每个来源的所有条目。
这是我目前拥有的,但它似乎没有起到作用。这似乎只有在我将该子查询中的LIMIT设置为1,从而只返回一个rawNames的情况下才有效。我需要它来匹配所有的rawNames。
SELECT * FROM table2
WHERE merchantName = (SELECT rawName FROM table1 WHERE strippedName = '".$strippedName."')
最快的修复方法是用merchantName IN
替换mercahantName =
SELECT * FROM table2
WHERE merchantName IN (SELECT rawName FROM table1 WHERE strippedName = '".$strippedName."')
=
运算符每侧需要恰好有一个值——IN
关键字将一个值与多个值相匹配。