2015-02-06 163 views
0

我试图连接mysql中的2个表。但是,我得到重复值。这SQLFIDDLE将明确我的意思。在mysql中连接两个表给出了重复的结果

因此,您可以看到TW_IDPFC_ID。我只需要(1, 1), (11, 11), (21, 21)等..现在我我使用此查询得到(1, 1), (1, 11), (1, 21), ...

SELECT tw.id as tw_id, pfc.id as pfc_id 
FROM account_treasury_wholesale tw 
INNER JOIN purchase_foreign_currency pfc 
    ON tw.wholesaler_id = pfc.currency_supplier_id 
WHERE tw.wholesaler_id='11' 

让我知道,如果你需要进一步澄清。谢谢。

+0

我试过了他们两个 – 2015-02-06 15:46:14

+0

为什么GROUP BY? (是否有任何聚合函数被使用?) – jarlh 2015-02-06 15:46:45

+0

连接是一个叉积(通常带条件)。如果一个t1行与4个t2行匹配,则会返回1 x 4 = 4行。如果2个t1行匹配4个t2行,则返回2 x 4 = 8行。如果你想要其他逻辑,你必须用文字或SQL来更好地描述它。 – jarlh 2015-02-06 15:51:35

回答

0

要么你加入ON tw.id=pfc.id,或者如果不适用你可能需要修改你的模式。

这是当你加入会发生什么ON tw.wholesaler_id = pfc.currency_supplier_id

  1. tw表中检索的第一行是tw.id=1
  2. 该行的tw.wholesaler_id是11(因为你WHERE条款),所以它会寻找对于pfc.currency_supplier_idpfc表中的行也等于11 - 这是4行(id等于1,11,21,23)。因此,跨产品将(1, 1)(1, 11)(1,21)(1,23)
  3. tw表中的下一行被检索,并与pfc表,这将导致(11,1), (11,11), (11,21), (11,23)相同的搜索发生...

我承认我不完全明白你想要做什么。多一点解释可能会有所帮助。