Mysql 根据记录在1个或多个字段上不匹配的2个表提取数据
我现在正在尝试从两个不同的表中提取数据,这些表在1个或多个字段中与同一条记录不匹配Mysql 根据记录在1个或多个字段上不匹配的2个表提取数据,mysql,sql,Mysql,Sql,我现在正在尝试从两个不同的表中提取数据,这些表在1个或多个字段中与同一条记录不匹配 TABLE 1 ---------------------------------- ID NAME MEMBER SMS_MEMBER 1 JOHN YES NO 2 JOY 'NO' NO 3 SMIT
TABLE 1
----------------------------------
ID NAME MEMBER SMS_MEMBER
1 JOHN YES NO
2 JOY 'NO' NO
3 SMITH NO 'YES'
4 ANDRES YES YES
5 JIMMY NO YES
TABLE 2
----------------------------------
ID NAME MEMBER SMS_MEMBER
1 JOHN YES NO
2 JOY 'YES' NO
3 SMITH NO 'NO'
4 ANDRES YES YES
5 JIMMY NO YES
这是我的逻辑问题
SELECT * FROM TABLE1
WHERE
TABLE1.ID NOT IN TABLE2.ID
OR
TABLE1.NAME NOT IN TABLE2.NAME
OR
TABLE1.EMAIL_MEMBER NOT IN TABLE2.EMAIL_MEMBER
OR
TABLE1.SMS_MEMBER NOT IN TABLE2.SMS_MEMBER;
提取的记录将被删除
----------------------------------
ID NAME MEMBER SMS_MEMBER
2 JOY 'NO' NO
3 SMITH NO 'YES'
因为下面的记录是匹配的,所以在查询之后,它将从最终摘录中排除
排除记录
如果你们也能在这方面帮助我,那就太好了。一个简单的方法就是使用聚合。假设两个表中没有重复项:
select id, name, member, sms_member
from ((select id, name, member, sms_member
from table1
) union all
(select id, name, member, sms_member
from table2
)
) t
group by id, name, member, sms_member
having count(*) = 1;
但是,示例数据表明,您只需要表2中不在表1中的行。如果是,我建议不存在
:
select t2.*
from table2 t2
where not exists (select 1
from table1 t1
where t1.id = t2.id and t1.name = t2.name and t1.member = t2.member an t1.sms_member = t2.sms_member
);
如果任何列中都可能存在NULL
值,则需要调整逻辑。您需要左连接:
select t1.*
from table1 t1 left join table2 t2
on t2.id = t1.id and t2.name = t1.name and t2.email_member = t1.email_member and t2.sms_member = t1.sms_member
where t2.id is null
匹配的记录将被排除,因为它们的t2.id
不是null
请参阅。
结果:
没有空值,所有值都有true或false,但我有两个表,所以我想匹配值已更改的位置TABLE1.ID不在TABLE2.ID
将排除所有行。@Cid有一个or,它排除所有名称和另一个,或排除所有成员和另一个,或排除所有sms_成员。啊,是的,没有联接,这不是逐条记录
select t1.*
from table1 t1 left join table2 t2
on t2.id = t1.id and t2.name = t1.name and t2.email_member = t1.email_member and t2.sms_member = t1.sms_member
where t2.id is null
| id | name | email_member | sms_member |
| --- | ----- | ------------ | ---------- |
| 2 | JOY | NO | NO |
| 3 | SMITH | NO | YES |