mysql 获取交集数据

mysql 获取交集数据,第1张

你是要查前十个查询结果中相同的那些记录,而不求前十个相同记录吧,因为这是有差别的,按照你的语句,应该是求前者,即先求出A的前十条数据,B的前十条数据,再求它们的交集。

既然是求交集,那么这两个表的关系模式应该是相同的了,

select

a.*

from

(select

*

from

table

order

by

table.a

desc

limit

10)

as

a,

(select

*

from

table

order

by

table.b

desc

limit

10)

as

b

where

a.primary_key

=

b.primary_key

--先将两个结果作为两张临时表,然后通过主键

primary_key来获取交集(交集肯定就是主键相等的了,因为关系模式相同)

joins主要是合并两个表中的数据组成一个临时的结果集,on后面指定执行连接所使用的的条件。inner join返回两个表基于连接条件实际匹配的行,即两个表交集。outer join返回两个表的并集结果,即匹配条件不满足的两个表的记录也将返回。

下面结合实例讲解,有如下两个表:

sql:

select * from A a inner join B b on a.ID = b.ID

或者

select * from A a, B b where a.ID = b.ID

查询结果如下:

1.INNER JOIN 产生的结果是AB的交集

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

2.LEFT [OUTER] JOIN 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name

3.RIGHT [OUTER] JOIN 产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。

SELECT * FROM TableA RIGHT OUTER JOIN TableB ON TableA.name = TableB.name

图标如left join类似。

4.FULL [OUTER] JOIN 产生A和B的并集。对于没有匹配的记录,则会以null做为值。

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

你可以通过is NULL将没有匹配的值找出来:

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

WHERE TableA.id IS null OR TableB.id IS null

5. CROSS JOIN 把表A和表B的数据进行一个N*M的组合,即笛卡尔积。如本例会产生4*4=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。

SELECT * FROM TableA CROSS JOIN TableB

相信大家对inner join、outer join和cross join的区别一目了然了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7517247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存