Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从两个不同的表中获取数据_Mysql_Sql - Fatal编程技术网

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

Mysql 如何从两个不同的表中获取数据,mysql,sql,Mysql,Sql,我正在尝试从两个不同的表中获取数据,这三个表的共同点是username字段,这是我迄今为止所做的尝试 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'); 我想要的是,如果us

我正在尝试从两个不同的表中获取数据,这三个表的共同点是username字段,这是我迄今为止所做的尝试

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
表中有post数据,在
portfolio
表中有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  |
-------------------------------------------

其中一些用户在post表和portfolio表中也有数据,因此获取详细信息,因为我的查询带来了重复的数据,我该怎么做呢?

只有在两个表中匹配时,才需要第一个条件内部连接工作OK

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

sqlfiddle

第二个问题

如果您有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'); 

根据您提供的示例,您的查询仅返回user1数据,而不是User2。我的查询应同时返回这两个数据。。其中位于('user1','user2')…检查是否有正确的数据。。在您的测试用例中,我应该在SQLFIDLE上显示查询中有错误吗?我已经用ref更新了查询。。摆弄。。就像你可以检查查询一样。谢谢,如果有第三个表,我怎样才能将第三个表集成到它中呢?你的查询返回重复的数据。嗨,你能给你的代码添加一些解释吗?这会出现在审阅队列中,因为只有代码的答案往往会出现。
  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');