【问题标题】:How to select data from database given an include ALL restriction?给定包含所有限制的情况下,如何从数据库中选择数据?
【发布时间】:2011-10-10 23:35:17
【问题描述】:

我目前正在学习如何使用 SQL 编程。我有一个table1firstnamelastnameroomname
我还有另一个table2,其中包含所有roomnames

我想知道如何从去过所有房间的人中选择firstnamelastname。我需要GROUP BY吗?

【问题讨论】:

  • 您使用的是哪种 SQL 方言?

标签: sql


【解决方案1】:

对于 TransactSQL,如果您知道第一个表中的每一行都是不同的,那么这将起作用:

SELECT
   firstname,
   lastname
FROM
   table1
GROUP BY
   firstname,
   lastname
HAVING
   COUNT(DISTINCT RoomName) = (SELECT COUNT(*) FROM table2)

这应该非常有效,但不太灵活,以防您想忽略某些房间。

【讨论】:

  • 如果名字在table1中重复怎么办?
  • 名字重复也没关系,只要他们总是有一个不同的房间。也就是说,名字、姓氏和房间名的组合对于每一行都是唯一的。
  • 如果他们有同一个房间怎么办?这基本上是我现在面临的问题......
  • 我稍微改变了我的答案。它现在应该处理这个问题。 但是一旦你得到完全重复的行,你就处于一个糟糕的地方。要么您的表格结构不佳,要么您解决问题的方法有误(即您提出了错误的问题)。
【解决方案2】:

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 语法和思维方式

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2013-12-10
    • 2012-09-06
    相关资源
    最近更新 更多