mysql - SQL:选择在另一个表中不具有值的 ID/值组合

标签 mysql sql sql-server database sql-server-2008

这基本上就是问题所在(我将其变成一个更普遍的问题,以防人们将来需要这样的东西)。

我有一张表(“People”),基本上就是这样的

╔══════════╦═══════╗
║ PersonID ║ Letter║
╠══════════╬═══════╣
║ 1        ║ A     ║
║ 1        ║ B     ║
║ 1        ║ C     ║
║ 1        ║ D     ║
║ 2        ║ A     ║
║ 2        ║ B     ║
║ 2        ║ C     ║
║ 3        ║ B     ║
║ 3        ║ C     ║
║ 4        ║ A     ║
║ 4        ║ C     ║
║ 4        ║ D     ║
║ 5        ║ E     ║
╚══════════╩═══════╝

假设我有另一个表(“字母”),它可以列出一个人可以拥有的所有可能的“字母”。

╔══════════╦══════╗
║ LetterID ║ Text ║
╠══════════╬══════╣
║ 1        ║ A    ║
║ 2        ║ B    ║
║ 3        ║ C    ║
║ 4        ║ D    ║
║ 5        ║ E    ║
╚══════════╩══════╝

我需要制作一个新表,其中列出所有人员以及他们没有的字母。因此对于这个例子,结果将是这样的

╔══════════╦══════════════╗
║ PersonID ║ LetterNotHad ║
╠══════════╬══════════════╣
║ 1        ║ E            ║
║ 2        ║ D            ║
║ 2        ║ E            ║
║ 3        ║ A            ║
║ 3        ║ D            ║
║ 3        ║ E            ║
║ 4        ║ B            ║
║ 4        ║ E            ║
║ 5        ║ A            ║
║ 5        ║ B            ║
║ 5        ║ C            ║
║ 5        ║ D            ║
╚══════════╩══════════════╝

非常感谢任何和所有帮助或指导。

编辑:这基本上就是我正在尝试的,类似这样

select p.PersonId, l.value
from letters l
left join people p
on l.Text = p.Letter
where p.personid is null

最佳答案

这是这个想法

WITH cte 
     AS (SELECT * 
         FROM   (SELECT DISTINCT personid 
                 FROM   people) B 
                CROSS JOIN (SELECT DISTINCT Text as letter 
                            FROM   letters) A) 
SELECT * 
FROM   cte c 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   first_table f 
                   WHERE  c.personid = f.personid 
                          AND c.letter = f.letter) 

注意:您需要在 People 表中使用 letterid 而不是 Letter 并定义一个 外键使表保持一致

关于mysql - SQL:选择在另一个表中不具有值的 ID/值组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109631/

相关文章:

sql - 如何隐藏警告: Changing any part of an object name could break scripts and stored procedures

mysql - 更新大表的排序规则

mysql - 选择和删除

python - 在 Teradata 中将 Python 数据框保存为表

sql - SQL 速度的惊人提升

SQL Server : querying hierarchical and referenced data

php - 我的 PHP 代码出现在导出的 CSV 文档中

php - 删除字符串mysql中新行后的空格

mysql - 如何丢弃内连接表中的值?

c# - 如何在允许良性 SQL 注入(inject)的同时防止恶意 SQL 注入(inject)攻击?