SQL Server数据在一个表中,但从另一个表中丢失

时间:2016-02-02 21:03:35

标签: sql sql-server sql-server-2008-r2 sql-server-ce sql-query-store

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

我的目标是列出每个孩子失踪的彩色气球。

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

  

Child BalloonColor

     
      
  • 莎莉黄
  •   
  • 莎莉怀特
  •   
  • Sally Blue
  •   
  • Bob Red
  •   
  • Bob Green
  •   
  • Bob White
  •   

这是表2,也是2列。

  

ColorCode颜色

     
      
  • Y黄色
  •   
  • W White
  •   
  • R Red
  •   
  • B Blue
  •   
  • G Green
  •   
  • P Pink
  •   

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

  
      
  • Sally,R,Red
  •   
  • 莎莉,G,格林
  •   
  • Sally,P,Pink
  •   
  • Bob,Y,Yellow
  •   
  • Bob,B,Blue
  •   
  • Bob,P,Pink
  •   

我的例子很小,但假设我的表1中有1000个孩子,表2中有75个颜色。我怎样才能检查每个孩子,一次一个,是我的终极问题? Not in查询只会产生" P,Pink",但您可以看到我需要在子级别而不是表级别。

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

MS SQL Server 2008 R2。

先谢谢你,迈克。

1 个答案:

答案 0 :(得分: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
    )