sql - 使用 Join,从多个没有外键的 SQL 表中选择值

标签 sql postgresql select join

我有一个包含两个表TeamUser 的数据库。 每个团队可以有一个或两个用户。 我希望选择表 Team 的输出,以便包含表 User 中的两个用户的信息。 一旦我定义了表结构,它会更容易理解。

团队:

+-----------+-------------------+-------------------+-----------------+
| team_name |     user_one      |     user_two      |    team_note    |
+-----------+-------------------+-------------------+-----------------+
| Team one  | skuhsa@jdds.dfd   | kgihse@kdhf.dfj   | one to twenty   |
| Team two  | dsjgknsz@djfd.fkg |                   | three to thirty |
+-----------+-------------------+-------------------+-----------------+

用户:

+-------------------+-----------+-----------------+
|       email       | user_name |    user_note    |
+-------------------+-----------+-----------------+
| skuhsa@jdds.dfd   | skuhsaone |   gimme money   |
| kgihse@kdhf.dfj   | kgihse    |    drop it      |
| dsjgknsz@djfd.fkg | dsjgknsz  |   just eat it   |
+-------------------+-----------+-----------------+

我正在寻找的输出是这样的。

+-----------+--------------------+-----------+------------------+-----------+-----------------+
| team_name | user_one           | user_name | user_two         | user_name | team_note       |
+-----------+--------------------+-----------+------------------+-----------+-----------------+
| Team one  | skuhsa@jdds.dfd    | skuhsaone | kgihse@kdhf.dfj  | kgihse    | one to twenty   |
+-----------+--------------------+-----------+------------------+-----------+-----------------+
| Team two  | dsjgknsz@djfd.fkg  | dsjgknsz  |                  |           | three to thirty |
+-----------+--------------------+-----------+------------------+-----------+-----------------+

我有一种很好的感觉,它可以轻松完成,但现在我正在尝试各种 JOIN 和东西,并以重复的结果或行结束。 如果有任何 PostgreSQL 特定的方法来做到这一点,我会很满意。

SELECT * FROM Team LEFT JOIN User ON Team.user_one=User.email 有效,但如何只选择我想要的列?即,它将如何区分第一个和第二个用户的黑白列?

最佳答案

一些 left join 应该可以解决问题:

SELECT    team_name, user_one, u1.user_name, user_two, u2.user_name, team_note
FROM      team t
LEFT JOIN user u1 ON t.user_one = u1.email
LEFT JOIN user u2 ON t.user_one = u2.email

关于sql - 使用 Join,从多个没有外键的 SQL 表中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35364875/

相关文章:

sql - 将 SQL 中的 2 个表与一些不同的列名组合 (Transact SQL)

php - 向 mysql 表中插入两个 SELECT 语句

postgresql - 无法使用JDBC将Postgres导入Spark中,但显示Hive警告

mysql - SQL 仅选择存在多个关系的行

select - 在 select 语句 Cassandra 中的 where 子句之后替代 OR 条件

sql - 如何检查 SQL Anywhere 中是否存在临时表?

sql - 通过SQL SP映射到网络驱动器

sql - 根据选择的另一行更新行,无需声明变量

python - 如何使用 SQLAlchemy 核心选择除 postgresql 中 1 个特定列之外的所有表列?

java - postgresql jpa earth_distance 查询