2017-09-25 106 views
0

我有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 | 
+--------+-----------------+-----------+-----------------------+ 

我很困惑为什么结果是双倍的..

+1

您需要GROUP BY和/或DISTINCT。这已被问过很多次。 –

回答

2

问题在于你的加入。目前,您正在使用cross joinbuy, item,这会让您获得两张表的笛卡尔积。 (意思是,由于您没有定义每个表中哪些列表示关系,因此您会得到一个查询结果,其中包含购买行中每行的每一行,这说明您的双重结果。)

您需要指定而是定义您的联合的列。

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

不客气。 –

相关问题