0

この質問の仕方がよくわからないので、まずは表の例と出力の例を示してから、私が達成しようとしていることをより詳しく説明します。

2 つのテーブルがあるとします。まずは企業一覧です。これらの企業の中には、さまざまなソースからインポートされ、継続的に更新されているため、エントリが重複しているものがあります。たとえば、会社のテーブルは次のようになります。

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

したがって、この状況では、3 つの異なるソースから入ってきた情報があります。これらの各ソースがすべて同じストアであることをプログラムが認識できるようにするために、削除された名前の列を作成しました (これは、URL などの作成にも使用します)。

2 番目のテーブルには、取引、クーポン、配送オファーなどに関する情報があります。ただし、これらはさまざまなソースから取得されるため、上記で特定した 3 つの異なる rawNames になります。たとえば、2 番目のテーブルは次のようになります。

| merchantName      | dealInformation       |
| kohls.com         | 10% off everything... |
| kohl's            | Free shipping on...   |
| kohls corporation | 1 Day Flash Sale!     |
| kohls.com         | Buy one get one...    |

ここでは、すべて同じ会社からの 4 つのエントリがあります。ただし、サイトのユーザーが Kohls のリストにアクセスしたときに、各ソースからのすべてのエントリを表示したいと考えています。

これが私が現在持っているものですが、うまくいかないようです。これは、そのサブクエリの LIMIT を 1 に設定して rawNames の 1 つだけを返す場合にのみ機能するようです。すべての rawNames と一致させる必要があります。

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

1 に答える 1

1

最も簡単な修正は、に置き換えることmercahantName =ですmerchantName IN

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

=演算子は、両側に 1 つの値を持つ必要があります。INキーワードは、値を複数の値と照合します。

于 2012-12-08T02:25:45.490 に答える