如何从两个不同的表中获取数据

时间:2016-07-03 19:11:13

标签: mysql sql

我试图从两个不同的表中获取数据,3个表的共同点是用户名字段,这是我到目前为止所尝试的

SELECT 
    *
FROM
    post f1
        INNER JOIN
    portfolio f2 ON f1.username = f2.username
WHERE
    f1.username IN ('user1' , 'user2')
        OR f2.username IN ('user1' , 'user2');

我想要的只是如果user1在post表格中发布数据&然后在portfolio表中的投资组合数据获取所有这些细节

这是表结构

发布表

-------------------------------------------
| id  | username | content | title | time |
-------------------------------------------
|  1  |   user1  |   eg    | titl  | eg1  |
|  2  |   user2  |   eg    | title | eg2  |
|  3  |   user3  |   eg    | title | eg3  |
|  4  |   user1  |   eg1   | title | eg4  |
|  5  |   user5  |   eg    | title | eg5  |
|  6  |   user6  |   eg    | title | eg6  |
-------------------------------------------

投资组合表

-------------------------------------------
| id  | username |  Image  | title | time |
-------------------------------------------
|  1  |   user1  |   eg    | titl  | eg1  |
|  2  |   user2  |   eg    | title | eg2  |
|  3  |   user4  |   eg    | title | eg3  |
|  4  |   user1  |   eg1   | title | eg4  |
|  5  |   user3  |   eg    | title | eg5  |
|  6  |   user6  |   eg    | title | eg6  |
-------------------------------------------

这些用户中的一些用户还有邮政表中的数据。投资组合表也是如此获取细节,我怎么能这样做,因为我的查询带来了重复的数据

2 个答案:

答案 0 :(得分:1)

只有在两个表格中匹配时,你才需要内部联接的第一个条件

  SELECT distinct f1.*, f2.* 
  FROM post f1
  INNER JOIN portfolio f2 ON f1.username = f2.username
  WHERE  f1.username IN ('user1' , 'user2'); 

  SELECT distinct f1.*, f2.* 
  FROM post f1
  INNER JOIN portfolio f2 ON 
          (f1.username = f2.username and  f1.username IN ('user1' , 'user2')); 

sqlfiddle http://sqlfiddle.com/#!9/1cfad/1

和第二个查询http://sqlfiddle.com/#!9/1cfad/2

如果您使用共同的用户名jave 3表,您可以使用双内连接

  SELECT distinct f1.*, f2.*, f3.* 
  FROM post f1
  INNER JOIN portfolio f2 ON f1.username = f2.username
  INNER JOIN table2 f3 on f1.username = f3.username
  WHERE  f1.username IN ('user1' , 'user2'); 

答案 1 :(得分:0)

#include <QApplication>
#include <QWidget>

#include <iostream>

int main (int argc, char **argv)
{
    QApplication app(argc, argv);

    QWidget window;

    window.resize(250, 150);
    window.setWindowTitle("Simple example");
    window.show();
    std::cout << "exec...\n";
    return app.exec();
}
相关问题