首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2个以上的表上的非相等联接

2个以上的表上的非相等联接
EN

Stack Overflow用户
提问于 2012-12-13 07:23:16
回答 3查看 3.3K关注 0票数 0

我试图从左表中取出记录,只从那些不在右表中的记录。我在左表中大约有5000条记录。同样,同样的事情也需要在3-4个以上的表上完成。我必须从第一个表中找出不在其余3-4个表中的记录。相同的主键或外键概念也适用于。

我第一次尝试使用两个表,从原始的5000条记录中提取了57万条记录。重复记录。

代码语言:javascript
复制
SELECT m.* FROM members m, pinnumber p where p.pinmemberid != m.memberid 

我的第二次尝试也使我的-sql浏览器挂起。

代码语言:javascript
复制
SELECT m.* FROM members m
LEFT JOIN pinnumber p ON p.pinmemberid != m.memberid
LEFT JOIN customer c ON m.memberid != c.memberid

我的第三次尝试也花了很多时间

代码语言:javascript
复制
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 )

请建议我怎么处理这个。如果我需要在这上面加入非等值连接。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-13 07:25:41

此查询将尝试将第一个表members与表pinnumbercustomer连接起来

代码语言:javascript
复制
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,所以查询将返回成员的所有行,但是如果连接不成功,pinmemberidmemberid将为null。那些值为null的行是那些在正确的表中不存在的行。您可能希望使用OR而不是AND。

如果使用join with !=条件,则第一个表中的所有行将与第二个表中的所有行相乘,但具有相同id的行除外。

获得相同结果的另一种方法是:

代码语言:javascript
复制
SELECT members.*
FROM members
WHERE
  memberid not in (select pinmembedid from pinnumber)
  and memberid not in (select memberid from customer)

(如果您愿意,请将AND替换为OR )。NOT IN子句可能会慢一点,但更容易理解。

票数 1
EN

Stack Overflow用户

发布于 2012-12-13 10:48:13

顺便说一句,你想做的是:

代码语言:javascript
复制
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会生成空值。您可以在联接之后过滤这些内容。

票数 0
EN

Stack Overflow用户

发布于 2018-08-05 00:14:33

我希望这个命令能产生您想要的输出。

代码语言:javascript
复制
SELECT m.* FROM members m LEFT JOIN pinnumber p ON p.pinmemberid = m.memberid where m.memberid is null;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13850411

复制
相关文章

相似问题

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