2017-09-25 3 views
0

2つのテーブルがあります。1つの条件に基づいて2つのテーブルのデータをフィルタリングします。

これは、テーブルを買うです:

+--------+-----------------+---------------+ 
| id_buy | date   | market  | 
+--------+-----------------+---------------+ 
| 6  | 2017-07-30  | Amazon  | 
| 7  | 2017-08-02  | Amazon  | 
| 17  | 2017-08-16  | Ebay   | 
| 18  | 2017-08-09  | Banggood  | 
| 19  | 2017-09-14  | Ebay   | 
+--------+-----------------+---------------+ 

、これは項目テーブルです:

+---------+----------------+-------------------------+ 
| id_item | id_buy   | items     | 
+---------+----------------+-------------------------+ 
| 6  |    6 | Filter Oli OH   | 
| 7  |    6 | Filter Solar Halus OH | 
| 8  |    6 | Switch Klakson 12/24 V | 
| 9  |    6 | Kampas Rem 188 + Paku F | 
| 10  |    7 | Kain Rem 188   | 
| 11  |    7 | Kain Rem 200   | 
| 23  |    17 | Kompresor Mesin   | 
| 24  |    18 | Silikon     | 
| 25  |    19 | Kompresor Mesin Ganda | 
+---------+----------------+-------------------------+ 

私はそれはのような結果を表示することができますので、市場のフィールドに基づいて購入及び項目テーブルをフィルタリングしますこの:

私は市場でフィルタリングする場合= 'アマゾン':

+--------+-----------------+---------------+-------------------------+ 
| id_buy | date   | market  | items     | 
+--------+-----------------+---------------+-------------------------+ 
| 6  | 2017-07-30  | Amazon  | Filter Oli OH   | 
| 6  | 2017-07-30  | Amazon  | Filter Solar Halus OH | 
| 6  | 2017-07-30  | Amazon  | Switch Klakson 12/24 V | 
| 6  | 2017-07-30  | Amazon  | Kampas Rem 188 + Paku F | 
| 7  | 2017-08-02  | Amazon  | Kain Rem 188   | 
| 7  | 2017-08-02  | Amazon  | Kain Rem 200   | 
+--------+-----------------+---------------+-------------------------+ 

私は市場=「イーベイ」でフィルタリングしている場合:

+--------+-----------------+---------------+-------------------------+ 
| id_buy | date   | market  | items     | 
+--------+-----------------+---------------+-------------------------+ 
| 17  | 2017-08-16  | Ebay   | Kompresor Mesin   | 
| 19  | 2017-09-14  | Ebay   | Kompresor Mesin Ganda | 
+--------+-----------------+---------------+-------------------------+ 

私は市場=「Banggood」でフィルタリングする場合:

+--------+-----------------+---------------+-------------------------+ 
| id_buy | date   | market  | items     | 
+--------+-----------------+---------------+-------------------------+ 
| 18  | 2017-08-09  | Banggood  | Silikon     | 
+--------+-----------------+---------------+-------------------------+ 

これは実際に結果を示すが、しないように私の例のクエリです作品:

select buy.id_buy, buy.date, buy.market, item.items from buy, item where buy.id_buy in(17,19) and item.id_buy in(17,19); 

と、これは、クエリの結果である:

+--------+-----------------+-----------+-----------------------+ 
| id_buy | date   | market | items     | 
+--------+-----------------+-----------+-----------------------+ 
| 17  | 2017-08-16  | Ebay  | Kompresor Mesin  | 
| 19  | 2017-09-14  | Ebay  | Kompresor Mesin  | 
| 17  | 2017-08-16  | Ebay  | Kompresor Mesin Ganda | 
| 19  | 2017-09-14  | Ebay  | Kompresor Mesin Ganda | 
+--------+-----------------+-----------+-----------------------+ 

なぜ結果が2倍になるのか混乱します。

+1

GROUP BYおよび/またはDISTINCTが必要です。これは以前何度も尋ねられてきました。あなたの説明のために –

答えて

2

問題はあなたの参加にあります。現在、cross joinbuy, itemを使用しています。これにより、2つのテーブルのデカルト積が得られます。 (意味するのは、各テーブルのどの列が関係を表すかを定義していないため、買いの各行のアイテムの各行に2つの結果が表示されるクエリ結果が得られます)。

代わりに結合を定義する列。

SELECT buy.id_buy, buy.date, buy.market, item.items 
FROM buy INNER JOIN item on buy.id_buy = item.id_buy 

次に、必要なものをwhere句に入れることができます。

+0

ありがとう。今、私は分かる。 – biladina

+0

ようこそ。 –

関連する問題