组合多个SQL表

时间:2017-04-21 11:24:06

标签: java mysql sql-server netbeans derby

当用户登录我的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会正确选择好友和他们的信息但是我无法将其与歌曲结合起来。
理想情况下,我想循环获取每个用户的详细信息(包括arraylist中的歌曲),然后创建一个用户对象的数组。

我正在使用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 = ?

?=登录的用户。

2 个答案:

答案 0 :(得分: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 = ?

用户,朋友和歌曲都是你的桌名。

为何选择LEFT JOIN?因为您不想在没有任何朋友的情况下删除用户,也不想删除没有任何歌曲的朋友。

答案 1 :(得分:0)

expect