使用 Distinct 或 Case 减少查询结果
Using Distinct or Case to reduce results in query
场景是关于网球的简单数据库,是:
Select 名中至少有两个 'e' 的男性玩家。 (这个
部分罚款)
显示目前在functie
(角色)
table 董事会成员(称为 bestuursleden
)。我已经推断出这个
是当列 eind_datum
(结束日期)为逻辑 NULL 时
原因与我的查询相同。
男玩家目前无一个functie
(功能)应该也
被展示。这部分出问题了。
预期 结果:
naam (name) | geslacht (gender)| functie (role)
_____________|__________________|_______________
Permentier | M | Voorzitter
Bakker, de | M | NULL
Bohemen, van | M | NULL
Meuleman | M | Penningmeester
Permentier | M | NULL
我的 结果(我遗漏了名字 Bohemen,van):
naam (name) | geslacht (gender)| functie (role)
_____________|__________________|_______________
Permentier | M | Voorzitter
Bakker, de | M | NULL
Meuleman | M | Penningmeester
Permentier | M | NULL
我的查询:
SELECT naam AS role, geslacht AS gender, functie AS role
FROM spelers s LEFT JOIN bestuursleden b ON s.spelersnr = b.spelersnr
WHERE geslacht LIKE 'M' AND LOWER(naam) LIKE '%e%e%' AND eind_datum IS NULL
ORDER BY s.spelersnr
如果我省略 WHERE 检查 AND eind_datum IS NULL
我得到以下结果,注意我添加了两列额外信息(开始日期和结束日期)以帮助确定我是否可以使用 CASE 或特定的 DISTINCT 函数来帮助我保持 Bohemen, van 我当前查询结果中缺少的记录:
naam (name) | geslacht (gender)| functie (role)| begin_date | end_date
_____________|__________________|_________________|____________|___________
Permentier | M | Secretaris | NOT NULL | NOT NULL
Permentier | M | Lid | NOT NULL | NOT NULL
Permentier | M | Penningmeester | NOT NULL | NOT NULL
Permentier | M | Voorzitter | NOT NULL | NULL
Bakker, de | M | NULL | NULL | NULL
Bohemen, van | M | Secretaris | NOT NULL | NOT NULL
Meuleman | M | Penningmeester | NOT NULL | NULL
Permentier | M | NULL | NULL | NULL
它的 Postgres,使用 pgadmin 作为工具。
我的 Table 定义:
据我了解,您想要显示玩家及其当前角色(如果他们拥有一个角色)。最好在连接语句中包含您的 end_date
条件,如下所示:
SELECT s.naam AS role
, s.geslacht AS gender
, b.functie AS role
FROM spelers s
LEFT
JOIN bestuursleden b
ON s.spelersnr = b.spelersnr
AND b.eind_datum IS NULL
WHERE s.geslacht = 'M'
AND LOWER(s.naam) LIKE '%e%e%'
ORDER BY s.spelersnr
这只会加入结束日期为 NULL
的 bestuursleden
行,即最新的行。如果玩家设置了结束日期,则不会加入,因此您将在 bestuursleden
.
的字段中获得 NULLs
注意:始终 在引用具有连接的查询中的列名时使用 table 别名。否则不熟悉您的数据库的人将不知道给定列的来源。
场景是关于网球的简单数据库,是:
Select 名中至少有两个 'e' 的男性玩家。 (这个 部分罚款)
显示目前在
functie
(角色) table 董事会成员(称为bestuursleden
)。我已经推断出这个 是当列eind_datum
(结束日期)为逻辑 NULL 时 原因与我的查询相同。男玩家目前无一个
functie
(功能)应该也 被展示。这部分出问题了。
预期 结果:
naam (name) | geslacht (gender)| functie (role)
_____________|__________________|_______________
Permentier | M | Voorzitter
Bakker, de | M | NULL
Bohemen, van | M | NULL
Meuleman | M | Penningmeester
Permentier | M | NULL
我的 结果(我遗漏了名字 Bohemen,van):
naam (name) | geslacht (gender)| functie (role)
_____________|__________________|_______________
Permentier | M | Voorzitter
Bakker, de | M | NULL
Meuleman | M | Penningmeester
Permentier | M | NULL
我的查询:
SELECT naam AS role, geslacht AS gender, functie AS role
FROM spelers s LEFT JOIN bestuursleden b ON s.spelersnr = b.spelersnr
WHERE geslacht LIKE 'M' AND LOWER(naam) LIKE '%e%e%' AND eind_datum IS NULL
ORDER BY s.spelersnr
如果我省略 WHERE 检查 AND eind_datum IS NULL
我得到以下结果,注意我添加了两列额外信息(开始日期和结束日期)以帮助确定我是否可以使用 CASE 或特定的 DISTINCT 函数来帮助我保持 Bohemen, van 我当前查询结果中缺少的记录:
naam (name) | geslacht (gender)| functie (role)| begin_date | end_date
_____________|__________________|_________________|____________|___________
Permentier | M | Secretaris | NOT NULL | NOT NULL
Permentier | M | Lid | NOT NULL | NOT NULL
Permentier | M | Penningmeester | NOT NULL | NOT NULL
Permentier | M | Voorzitter | NOT NULL | NULL
Bakker, de | M | NULL | NULL | NULL
Bohemen, van | M | Secretaris | NOT NULL | NOT NULL
Meuleman | M | Penningmeester | NOT NULL | NULL
Permentier | M | NULL | NULL | NULL
它的 Postgres,使用 pgadmin 作为工具。
我的 Table 定义:
据我了解,您想要显示玩家及其当前角色(如果他们拥有一个角色)。最好在连接语句中包含您的 end_date
条件,如下所示:
SELECT s.naam AS role
, s.geslacht AS gender
, b.functie AS role
FROM spelers s
LEFT
JOIN bestuursleden b
ON s.spelersnr = b.spelersnr
AND b.eind_datum IS NULL
WHERE s.geslacht = 'M'
AND LOWER(s.naam) LIKE '%e%e%'
ORDER BY s.spelersnr
这只会加入结束日期为 NULL
的 bestuursleden
行,即最新的行。如果玩家设置了结束日期,则不会加入,因此您将在 bestuursleden
.
NULLs
注意:始终 在引用具有连接的查询中的列名时使用 table 别名。否则不熟悉您的数据库的人将不知道给定列的来源。