0

我为措辞不当的标题道歉:(

我有三张桌子。

  1. 表 MARA:文章及其描述。
  2. 表 MARC:文章到网站分类。
  3. 表 T001W:站点及其位置。

我试图在 MARC 中找到缺失的记录,这些记录表明一篇文章未分类到某个站点。有关基本示例,请参见附表。

在这里,有 2 篇文章(A 和 B)和 4 个站点(1、2、3 和 4)。我正在寻找可以根据 MA​​RA 中的文章和 MARC 中的站点搜索 MARC 并告诉我什么不存在的查询。此示例中的正确答案是 A-4、B-1 和 B-4。

或者,我可以在查询的列表中提供 MARA 和 T001W 值以避免任何连接。MARA 将有大约 1,500 个值,而 T001W 将有 2,000 个。

<style type="text/css">
  .tg {
    border-collapse: collapse;
    border-spacing: 0;
  }
  
  .tg td {
    font-family: Arial, sans-serif;
    font-size: 14px;
    padding: 10px 5px;
    border-style: solid;
    border-width: 1px;
    overflow: hidden;
    word-break: normal;
    border-color: black;
  }
  
  .tg th {
    font-family: Arial, sans-serif;
    font-size: 14px;
    font-weight: normal;
    padding: 10px 5px;
    border-style: solid;
    border-width: 1px;
    overflow: hidden;
    word-break: normal;
    border-color: black;
  }
  
  .tg .tg-amwm {
    font-weight: bold;
    text-align: center;
    vertical-align: top
  }
  
  .tg .tg-8m24 {
    background-color: #000000;
    text-align: left;
    vertical-align: top
  }
  
  .tg .tg-8zwo {
    font-style: italic;
    text-align: left;
    vertical-align: top
  }
  
  .tg .tg-0lax {
    text-align: left;
    vertical-align: top
  }
</style>
<table class="tg">
  <tr>
    <th class="tg-amwm" colspan="2">MARA</th>
    <th class="tg-8m24"></th>
    <th class="tg-amwm" colspan="2">MARC</th>
    <th class="tg-8m24"></th>
    <th class="tg-amwm" colspan="2">T001W</th>
  </tr>
  <tr>
    <td class="tg-8zwo">Article</td>
    <td class="tg-8zwo">Desc</td>
    <td class="tg-8m24"></td>
    <td class="tg-8zwo">Article</td>
    <td class="tg-8zwo">Site</td>
    <td class="tg-8m24"></td>
    <td class="tg-8zwo">Site</td>
    <td class="tg-8zwo">Continent</td>
  </tr>
  <tr>
    <td class="tg-0lax">A</td>
    <td class="tg-0lax">Spoon</td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax">A</td>
    <td class="tg-0lax">1</td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax">1</td>
    <td class="tg-0lax">NA</td>
  </tr>
  <tr>
    <td class="tg-0lax">B</td>
    <td class="tg-0lax">Fork</td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax">A</td>
    <td class="tg-0lax">2</td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax">2</td>
    <td class="tg-0lax">SA</td>
  </tr>
  <tr>
    <td class="tg-0lax"></td>
    <td class="tg-0lax"></td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax">A</td>
    <td class="tg-0lax">3</td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax">3</td>
    <td class="tg-0lax">EU</td>
  </tr>
  <tr>
    <td class="tg-0lax"></td>
    <td class="tg-0lax"></td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax">B</td>
    <td class="tg-0lax">2</td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax">4</td>
    <td class="tg-0lax">AS</td>
  </tr>
  <tr>
    <td class="tg-0lax"></td>
    <td class="tg-0lax"></td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax">B</td>
    <td class="tg-0lax">3</td>
    <td class="tg-8m24"></td>
    <td class="tg-0lax"></td>
    <td class="tg-0lax"></td>
  </tr>
</table>


编辑:添加文本表和示例数据。

表 MARA
文章 | 描述
A | 勺子
B | 叉子

表 MARC
文章 | 网站
A | 1个
| 2个
| 3
乙 | 2
乙 | 3

表 T001W
网站 | 描述
1 | 不适用
2 | SA
3 | 欧盟
4 | 作为

4

1 回答 1

0

如果我理解正确,您可以使用 across join生成网站和文章的所有组合,然后删除存在的那些:

select s.site, a.article
from sites s cross join
     articles a left join
     marc m
     on m.article = a.article and
        m.site = s.site
where m.article is null;

我重命名了这些表,以便更容易理解查询逻辑。

于 2020-02-12T13:29:08.720 回答