【问题标题】:SQL to find missing linking table rowsSQL 查找丢失的链接表行
【发布时间】:2014-11-28 20:56:03
【问题描述】:

我是 SQL 新手,很难正确查询此查询。简单来说,我的表结构是这样的:

Table A:
    aId primary key

Table B:
    bId primary key

Table A_B:
    aId foreign key A(aId)
    bId foreign key B(bId)

我想创建一个 SQL 查询,它会告诉我 AB 的哪些组合未在链接表 A_B 中表示。此外,每个组合只能显示一次。

以下是我尝试过的查询,但均无效。在将行添加到链接表后,它们都开始重复组合。

SELECT A.aId, B.bId 
FROM A JOIN B JOIN A_B 
WHERE (A.aId!=A_B.aId OR B.bId!=A_B.bId)

SELECT A.aId, B.bId 
FROM A LEFT JOIN B LEFT JOIN A_B 
WHERE (A.aId!=A_B.aId OR B.bId!=A_B.bId)

SELECT A.aId, B.bId 
FROM A JOIN B JOIN A_B 
WHERE (A.aId!=A_B.aId AND B.bId!=A_B.bId)

我怎样才能做到这一点?

此外,非常感谢您提供解决方案的解释 - 可能很明显,我还没有完全理解连接。

【问题讨论】:

  • 你能展示示例数据吗?

标签: sql sqlite join


【解决方案1】:

使用这些 WHERE,您可以检查 任何 行组合是否具有这些值。

但是,“不代表”是不同的;您实际上想检查 all 行是否没有这些值。

这需要像EXISTS这样的运算符:

SELECT A.aId, B.bId
FROM A CROSS JOIN B
WHERE NOT EXISTS (SELECT 1
                  FROM A_B
                  WHERE aId = A.aID
                    AND bId = B.bID)

【讨论】:

  • 这很完美!我了解了CROSS JOINEXISTS。谢谢你的帮助。 +1 并接受...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多