如何选择不在另一个表中的映射数据

时间:2015-01-04 06:45:03

标签: mysql sql select

tableA
Aid | Aname     |
1   | univer    |
2   | teaser    |

tableB
Bid | Bname |
66  |  ako  |
77  | fas   |
88  | yh    |

tableA中的值应与tableB

中的所有值一起映射
 tableC
 Aid | Bid  |
 1  | 66    |
 1  | 88    |
 2  | 66    |
 2  | 77    |

现在,我想从tableAtableB中选择tableC中不属于Aid=1的值。 例如,我想查找Bid=77tableC,因为它们在Aid=2中找不到, 再次找到Bid=88tableC,因为在EXPECTED RESULTS Aid | Bid | 1 | 77 | 2 | 88 | 中找不到它们。

{{1}}

1 个答案:

答案 0 :(得分:3)

您可以使用cross join生成所有排列,然后您可以使用not exists运算符过滤掉tablec中已存在的排列:

SELECT     aid, bid
FROM       tablea a
CROSS JOIN tableb b
WHERE      NOT EXISTS (SELECT *
                       FROM   tablec c
                       WHERE  c.aid = a.aid AND c.bid = b.bid)

示例结果:

AID BID
1   77
2   88

结果为SQL Fiddle