我正在尝试从两个不同的表中获取数据,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 |
-------------------------------------------
其中一些用户在 post 表和 portfolio 表中也有数据,所以获取详细信息,我该怎么做,因为我的查询带来了重复数据
最佳答案
你只需要第一个条件,只有当两个表匹配时,内部连接才会工作
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');
关于mysql - 如何从两个不同的表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38173465/