如何 select 映射不在另一个 table 中的数据
How to select mapped data which are not in another table
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 |
现在我想 select tableA
中映射到 tableB
中但不在 tableC
中的值。
例如,我想找到 Aid=1
和 Bid=77
,因为它们在 tableC
中找不到,
再次查找 Aid=2
和 Bid=88
,因为它们未在 tableC
.
中找到
EXPECTED RESULTS
Aid | Bid |
1 | 77 |
2 | 88 |
你可以用一个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。
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 |
现在我想 select tableA
中映射到 tableB
中但不在 tableC
中的值。
例如,我想找到 Aid=1
和 Bid=77
,因为它们在 tableC
中找不到,
再次查找 Aid=2
和 Bid=88
,因为它们未在 tableC
.
EXPECTED RESULTS
Aid | Bid |
1 | 77 |
2 | 88 |
你可以用一个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。