【发布时间】:2011-10-10 23:35:17
【问题描述】:
我目前正在学习如何使用 SQL 编程。我有一个table1 和firstname、lastname 和roomname。
我还有另一个table2,其中包含所有roomnames。
我想知道如何从去过所有房间的人中选择firstname 和lastname。我需要GROUP BY吗?
【问题讨论】:
-
您使用的是哪种 SQL 方言?
标签: sql
我目前正在学习如何使用 SQL 编程。我有一个table1 和firstname、lastname 和roomname。
我还有另一个table2,其中包含所有roomnames。
我想知道如何从去过所有房间的人中选择firstname 和lastname。我需要GROUP BY吗?
【问题讨论】:
标签: sql
对于 TransactSQL,如果您知道第一个表中的每一行都是不同的,那么这将起作用:
SELECT
firstname,
lastname
FROM
table1
GROUP BY
firstname,
lastname
HAVING
COUNT(DISTINCT RoomName) = (SELECT COUNT(*) FROM table2)
这应该非常有效,但不太灵活,以防您想忽略某些房间。
【讨论】:
Group by 是用于对结果进行分组的命令
我可以看到您在 table1 中有重复项: 比方说:
**table1:**
firstname lastname roomname
Theodore Hello roomA
Mike World roomA
Theodore Hello roomB
Theodore Hello roomC
NickThe Greek roomC
And **table2:**
roomname
roomA
roomB
roomC
如您所见,Theodore 是从 table2 的所有房间经过的那个人。 用通用语言(构建 SQL 查询的好方法)你会说: 从table2的所有行中抓取table1中的人:
看看这里: Fetching only rows that match all entries in a joined table (SQL)
但正如 Jamie 所说,这不是正确的 sql 语法和思维方式
【讨论】: