组合多个 SQL 表

Posted

技术标签:

【中文标题】组合多个 SQL 表【英文标题】:combining multiple SQL tables 【发布时间】:2017-09-18 09:14:18 【问题描述】:

当用户登录我的 Java 应用程序时,我正在尝试创建朋友列表。 我有 3 张桌子,USERS、FRIENDS 和 SONGS。

用户表:

ID| USERNAME | DOB      |
:-| -------- | -------- |
1 | Ted      |01/01/1990|
2 | Jim      |02/03/1990|
3 | Bill     |03/03/1990|

好友表(ID = USER 表中的 ID)

USER_ID| FRIEND_ID |
:------| --------- |
1      | 2         |
2      | 1         |
1      | 3         |
3      | 1         |

歌曲表(再次ID = USER)

ID| ARTIST    | TITLE            |
:-| --------- | ---------------- |
2 | Queen     | We will rock you |
2 | KISS      | Crazy nights     |
2 | Aerosmith | Jaded            |

所以我需要做的是当用户登录时,从朋友表中选择他们所有的朋友,获取有关这些朋友的所有信息,并选择属于该朋友的每一首歌曲。

目前我有一些 sql 可以正确选择朋友及其信息,但是我无法将其与获取歌曲结合起来。 理想情况下,我想循环获取每个用户的详细信息(包括数组列表中的歌曲),然后创建一个用户对象数组。

我用来交朋友的SQL:

SELECT Username, DOB, POB FROM USERS WHERE ID in (SELECT FRIEND_ID FROM 
ADMIN1.FRIENDSHIPS Where USER_ID in (Select ID FROM USERS WHERE USERNAME = ?

?= 登录的用户。

【问题讨论】:

mysql 和 SQL Server 是两个完全不同的 DBMS。你已经在标签中提到了这两个 - 但你到底在使用什么?关于您的任务 - 看起来您需要了解 SQL 中的 join 操作 - 然后您将轻松实现您的目标。 【参考方案1】:

你应该像这样使用JOINs:

SELECT * FROM users
LEFT JOIN friends ON friends.user_id = users.id
LEFT JOIN songs ON songs.id = friends.friend_id
WHERE users.id = ?

用户、朋友和歌曲是您的表名。

为什么要左连接?因为您不想删除没有朋友的用户或没有任何歌曲的朋友。

【讨论】:

【参考方案2】:
 select u.ID,f.FRIEND_ID,fsong.ARTIST
  from user u 
 inner join friend f on u.ID=f.USER_ID
 left join user fsong on fsong.ID= f.FRIENDID

【讨论】:

请编辑您的答案以包含一些解释。仅代码的答案对教育未来的 SO 读者几乎没有作用。您的答案因质量低劣而在审核队列中。

以上是关于组合多个 SQL 表的主要内容,如果未能解决你的问题,请参考以下文章

如何编写组合多个表的Oracle Sql Query

SQL 组合多个 SELECT 语句

在LINQ中组合多个表

是否可以将多个 SQL 语句组合在一起?

SQL学习之组合查询(UNION)

SQL总结