2012-12-08 108 views
0

我不完全確定如何提出這個問題,所以我將通過提供一個示例表和一個示例輸出來引導,然後對我正在嘗試完成的內容進行更全面的解釋。如何使用mysql匹配來自第二個表的多個可能性?

想象一下,我有兩張桌子。首先是公司名單。其中一些公司由於被導入並且從不同來源不斷更新而具有重複條目。例如,該公司表可能是這個樣子:

| rawName   | strippedName | 
| Kohl's   | kohls  | 
| kohls.com   | kohls  | 
| kohls Corporation | kohls  | 

所以在這種情況下,我們已經從三個不同的來源進來的信息。爲了讓我的程序能夠理解這些源代碼都是同一個商店,我創建了剝離的名稱列(我也用它來創建URL和什麼)。

在第二個表,我們對交易,優惠券,送貨優惠等信息。然而,由於這些從各種渠道進來,到底了,我們以上三個不同rawNames。例如,第二表可能是這個樣子:

| 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."') 
+1

的原因,當你設置限制1 ;-)你的嵌套查詢確實返回你所需要的所有行,而且不止一個查詢纔有效。只有當你自己運行嵌套查詢時,你纔會注意到這一點。既然你需要你的表比較從阿瑟賽德一堆值的,必須使用正確的操作是'IN' – bonCodigo

回答

1

最快的解決方法是更換您mercahantName =merchantName IN

SELECT * FROM table2 
WHERE merchantName IN (SELECT rawName FROM table1 WHERE strippedName = '".$strippedName."') 

=運營商需要在每側有一個值 - 該IN關鍵字對多個值的值相匹配。

+0

哇。我不敢相信這很容易。這就像一個魅力。謝謝你,朋友。當時間到期時,我會批准你的答案。 –

相關問題