1

这不像标题那么简单。(什么是合适的标题?)我认为描述我的问题的最简单方法是举个例子。

我的目标是列出每个孩子缺少的颜色气球。

假设表 1 在 2 列中包含以下数据:

儿童气球颜色

  • 莎莉黄
  • 莎莉怀特
  • 莎莉蓝
  • 鲍勃·瑞德
  • 鲍勃·格林
  • 鲍勃·怀特

这是表 2,也是 2 列。

颜色代码 颜色

  • Y 黄色
  • W 白色
  • 红色
  • B 蓝色
  • G 绿色
  • P粉红色

我需要编写一个结果集,说明每个孩子需要拥有所有颜色的颜色气球。

  • 莎莉,R,红
  • 萨莉,G,格林
  • 莎莉,P,粉红色
  • 鲍勃,Y,黄色
  • 鲍勃,B,蓝色
  • 鲍勃,P,粉红色

我的例子很小,但假设我的表 1 中有 1000 个孩子,表 2 中有 75 种颜色。我如何检查每个孩子,一次一个,是我的最终问题吗?Not in查询只会产生“P, Pink”,但您可以看到我在子级而不是表级需要它。

我不是开发人员,但可以编写好的 SQL 语句。

微软 SQL Server 2008 R2。

在此先感谢,迈克。

4

1 回答 1

1
SELECT
    SQ.child_name,
    BC.balloon_color
FROM
    (
    SELECT DISTINCT
        child_name
    FROM
        Child_Balloons
    ) SQ
CROSS JOIN Balloon_Colors BC
WHERE
    NOT EXISTS (
        SELECT *
        FROM Child_Balloons CB
        WHERE
            CB.child_name = SQ.child_name AND
            CB.balloon_color = BC.balloon_color
    )
于 2016-02-02T21:18:10.997 回答