过滤2个MySQL表

时间:2018-01-18 12:37:12

标签: mysql sql vb.net

有人在这里尝试使用单独表格上的字段过滤表吗?例如Table_1包含登录,组,名称字段,Table_2具有登录,数量,利润,open_time,close_time字段。

由于Table_2没有组,我想按组过滤登录,以便查询结果已经过滤。我已经尝试了下面的声明,该声明没有错误,但没有返回任何结果。

"SELECT DISTINCT a.LOGIN, a.GROUP, b.LOGIN, b.SYMBOL,
       SUM(b.VOLUME) NetVolume, SUM(b.PROFIT) NetProfit, b.CLOSE_TIME 
 FROM TABLE_1 a, TABLE_2 b
 WHERE b.CLOSE_TIME BETWEEN '"+dateTimePicker1.Value.ToString("yyyy-MM-dd")+"' AND '"+ dateTimePicker1.Value.ToString("yyyy-MM-dd")+"' AND 
       a.GROUP NOT IN('group_a','group_b') AND
       a.LOGIN = b.LOGIN
   ORDER BY NetVolume";

我希望有人能帮助我。

...谢谢

2 个答案:

答案 0 :(得分:0)

评论太长了。它没有直接解决这个问题。

代码中有两个主要错误:

  1. 从不FROM子句中使用逗号。 始终使用正确的显式JOIN语法。
  2. 使用参数将值传递给查询。
  3. 您可能需要LEFT JOIN,但无法用逗号表达。

    另外:

      {li> SELECT DISTINCT几乎不需要GROUP BY
    • GROUP BY没有所有未加聚合的列。

    您应该编写一个干净的查询。这实际上可能会解决您的潜在问题。问题可能是由于传入的参数值。

答案 1 :(得分:0)

您需要使用INNER JOIN

所以它看起来像

    SELECT DISTINCT a.LOGIN, a.GROUP, b.LOGIN, b.SYMBOL,
        SUM(b.VOLUME) NetVolume, SUM(b.PROFIT) NetProfit, b.CLOSE_TIME 
    FROM a INNER JOIN b ON a.LOGIN = b.LOGIN 
    WHERE b.CLOSE_TIME BETWEEN '"+dateTimePicker1.Value.ToString("yyyy-MM-dd")+"' AND '"+ dateTimePicker1.Value.ToString("yyyy-MM-dd")+"' AND a.GROUP NOT IN('group_a','group_b') AND
   ORDER BY NetVolume";

有关MySql中的连接的更多信息,请查看 https://dev.mysql.com/doc/refman/5.7/en/join.html