我试图从左表中取出记录,只从那些不在右表中的记录。我在左表中大约有5000条记录。同样,同样的事情也需要在3-4个以上的表上完成。我必须从第一个表中找出不在其余3-4个表中的记录。相同的主键或外键概念也适用于。
我第一次尝试使用两个表,从原始的5000条记录中提取了57万条记录。重复记录。
SELECT m.* FROM members m, pinnumber p where p.pinmemberid != m.memberid 我的第二次尝试也使我的-sql浏览器挂起。
SELECT m.* FROM members m
LEFT JOIN pinnumber p ON p.pinmemberid != m.memberid
LEFT JOIN customer c ON m.memberid != c.memberid我的第三次尝试也花了很多时间
SELECT * FROM members m
WHERE 1=1 AND AND not exists ( select 1 from pinnumber p where 1=1 And
p.pinmemberid = m.memberid AND p.pinproductid LIKE '%Remit%')
AND not exists ( select 1 from customer c where 1=1 and c.card_name is not null AND m.memberid = c.memberid )请建议我怎么处理这个。如果我需要在这上面加入非等值连接。
发布于 2012-12-13 07:25:41
此查询将尝试将第一个表members与表pinnumber和customer连接起来
SELECT m.*
FROM
members m
LEFT JOIN pinnumber p ON p.pinmemberid = m.memberid
LEFT JOIN customer c ON m.memberid = c.memberid
WHERE p.pinmemberid is null and c.memberid is null因为我们使用的是left join,所以查询将返回成员的所有行,但是如果连接不成功,pinmemberid和memberid将为null。那些值为null的行是那些在正确的表中不存在的行。您可能希望使用OR而不是AND。
如果使用join with !=条件,则第一个表中的所有行将与第二个表中的所有行相乘,但具有相同id的行除外。
获得相同结果的另一种方法是:
SELECT members.*
FROM members
WHERE
memberid not in (select pinmembedid from pinnumber)
and memberid not in (select memberid from customer)(如果您愿意,请将AND替换为OR )。NOT IN子句可能会慢一点,但更容易理解。
发布于 2012-12-13 10:48:13
顺便说一句,你想做的是:
SELECT m.* FROM members m
LEFT JOIN pinnumber p ON p.pinmemberid = m.memberid
LEFT JOIN customer c ON m.memberid = c.memberid
where p.pinmemberid is null and c.pinmemberid is null当正确的表中没有记录时,left join会生成空值。您可以在联接之后过滤这些内容。
发布于 2018-08-05 00:14:33
我希望这个命令能产生您想要的输出。
SELECT m.* FROM members m LEFT JOIN pinnumber p ON p.pinmemberid = m.memberid where m.memberid is null;https://stackoverflow.com/questions/13850411
复制相似问题