首先,对不起标题,因为我不是以英语为母语的人,这句话很难表达。换句话说,我想要实现的是:
我正在尝试从表"postmaster@%".中获取所有域名,其中在virtual_aliases表中没有相应的条目,比如
所以如果我有两个域:
foo.org
example.orgA他们的化名如下:
info@foo.org => admin@foo.org
postmaster@foo.org => user1@foo.org
info@example.org => admin@example.org我希望查询只返回域"foo.org“,因为"example.org”缺少postmaster别名。
这是表的布局:
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,像查询一样,但没有成功。我不需要一个最终的解决方案,也许只是一个提示和一些解释。谢谢!
发布于 2011-01-17 11:15:24
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:
SELECT * FROM virtual_domains AS domains
WHERE domains.id NOT IN (
SELECT domain_id
FROM virtual_aliases
WHERE whatever_column LIKE "postmaster@%"
)发布于 2011-01-17 11:14:45
select id,domain from virtual_domains
where id not in (select domain_id from virtual_aliases)发布于 2011-01-17 11:36:09
SELECT * FROM virtual_domains vd
LEFT JOIN virtual_aliases va ON vd.id = va.domain_id
AND va.destination NOT LIKE 'postmaster@%';https://stackoverflow.com/questions/4712495
复制相似问题