首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:在另一个表中不存在相关条目的返回字段

问MySQL:在另一个表中不存在相关条目的返回字段
EN

Stack Overflow用户
提问于 2011-01-17 11:10:52
回答 3查看 886关注 0票数 2

首先,对不起标题,因为我不是以英语为母语的人,这句话很难表达。换句话说,我想要实现的是:

我正在尝试从表"postmaster@%".中获取所有域名,其中在virtual_aliases表中没有相应的条目,比如

所以如果我有两个域:

代码语言:javascript
复制
foo.org
example.org

A他们的化名如下:

代码语言:javascript
复制
info@foo.org       => admin@foo.org
postmaster@foo.org => user1@foo.org
info@example.org   => admin@example.org

我希望查询只返回域"foo.org“,因为"example.org”缺少postmaster别名。

这是表的布局:

代码语言:javascript
复制
mysql> show columns from virtual_aliases;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment | 
| domain_id   | int(11)      | NO   | MUL | NULL    |                | 
| source      | varchar(100) | NO   |     | NULL    |                | 
| destination | varchar(100) | NO   |     | NULL    |                | 
+-------------+--------------+------+-----+---------+----------------+

mysql> show columns from virtual_domains;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment | 
| name  | varchar(50) | NO   |     | NULL    |                | 
+-------+-------------+------+-----+---------+----------------+

我试了很多个小时,用IF,CASE,像查询一样,但没有成功。我不需要一个最终的解决方案,也许只是一个提示和一些解释。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-17 11:15:24

代码语言:javascript
复制
SELECT * FROM virtual_domains AS domains
LEFT JOIN  virtual_aliases AS aliases
ON domains.id = aliases.domain_id
WHERE aliases.domain_id IS NULL

左联接返回“左”表中的所有记录,即使它们在“右”表中没有相应的记录。这些记录将把正确的表字段设置为NULL。用什么地方剥去其他人的衣服。

我想我第一次没听懂你的话。对于单个域,在aliases中有几个条目,并且只想显示那些别名表中没有以"postmaster“开头的条目的域?

在这种情况下,您应该像这样使用NOT IN:

代码语言:javascript
复制
SELECT * FROM virtual_domains AS domains
WHERE domains.id NOT IN (
    SELECT domain_id
    FROM virtual_aliases
    WHERE whatever_column LIKE "postmaster@%"
)
票数 4
EN

Stack Overflow用户

发布于 2011-01-17 11:14:45

代码语言:javascript
复制
select id,domain from virtual_domains 
where id not in (select domain_id from virtual_aliases)
票数 2
EN

Stack Overflow用户

发布于 2011-01-17 11:36:09

代码语言:javascript
复制
SELECT * FROM virtual_domains vd
LEFT JOIN virtual_aliases va ON vd.id = va.domain_id
AND va.destination NOT LIKE 'postmaster@%';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4712495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档