如何避免笛卡尔连接

sinxy 2008-02-21 02:39:16
有一条SQL语句
select aa.col1,aa.col2,aa.col3, ... ,bb.col1,bb.col2 from table1 aa,table2 bb
where aa.ID = bb.ID


现在的逻辑是要取出和它条件相反的纪录,即table1.ID 不等于 table2.ID 的纪录
我写的SQL是
select aa.col1,aa.col2,aa.col3, ... ,bb.col1,bb.col2 from table1 aa,table2 bb
where aa.ID not in (Select ID from table2)


但是这样取的话,就出现了笛卡尔积,虽然取出了纪录,但是纪录总数目是正确情况的count倍(count为table2的纪录数)

请问该怎样写这条SQL,避免笛卡尔积。
...全文
399 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lainY7mail 2008-02-21
  • 打赏
  • 举报
回复
1楼正解
viva369 2008-02-21
  • 打赏
  • 举报
回复
table1.ID 不等于 table2.ID
那你怎么取出table2列的值,是你写错了,还是我理解错了
viva369 2008-02-21
  • 打赏
  • 举报
回复
你这个是交叉连接。

wangdehao 2008-02-21
  • 打赏
  • 举报
回复
select a.*
from table1 a
left join table2 b
on a.id=b.id
where b.id is null
wangdehao 2008-02-21
  • 打赏
  • 举报
回复
select *
from table1
where id not in(Select ID from table2)

---笛卡尔积是你自己写进去的
wangdehao 2008-02-21
  • 打赏
  • 举报
回复
select * from table1 a
where not exists(
select * from table2 where id = a.id
)
zefuzhang2008 2008-02-21
  • 打赏
  • 举报
回复
select aa.col1,aa.col2,aa.col3, ... ,bb.col1,bb.col2 from table1 aa left join table2 bb
on aa.id=bb.id
where bb.id is null
union
select aa.col1,aa.col2,aa.col3, ... ,bb.col1,bb.col2 from table1 aa right join table2 bb
on aa.id=bb.id
where aa.id is null



JiangHongTao 2008-02-21
  • 打赏
  • 举报
回复
直接写不好吗
--table1有table2没有的
select * from table1 where ID not in (Select ID from table2)
--table2有table1没有的
select * from table2 where ID not in (Select ID from table1)
--什么,两个都要,对表字段不明,只能取ID
select id,'table2没有' from table1 where ID not in (Select ID from table2)
union
select id,'table1没有' from table2 where ID not in (Select ID from table1)
sinxy 2008-02-21
  • 打赏
  • 举报
回复
发生笛卡尔积的原因在于 select 列表中包含了 table2.ID ,而要选取的table2的ID本身是不存在的,所以把table2.ID从select列表中删去就可以了
sinxy 2008-02-21
  • 打赏
  • 举报
回复
在数据表 table2 中的 ID是 not bull的
所以上面的应该不行 呵呵
pt1314917 2008-02-21
  • 打赏
  • 举报
回复

--try:

select aa.col1,aa.col2,aa.col3, ... ,bb.col1,bb.col2 from table1 aa left join table2 bb
on aa.id=bb.id and bb.id is null


代码下载地址: https://pan.quark.cn/s/bc087ffa872a "测控电路课后习题详解"文件.pdf是一份极具价值的学术资料,其中系统地阐述了测控电路的基础理论、系统构造、核心特性及其实际应用领域。 以下是对该文献的深入解读和系统梳理:1.1测控电路在测控系统中的核心功能测控电路在测控系统的整体架构中扮演着不可或缺的角色。 它承担着对传感器输出信号进行放大、滤除杂音、提取有效信息等关键任务,并且依据测量与控制的需求,执行必要的计算、处理与变换操作,最终输出能够驱动执行机构运作的指令信号。 测控电路作为测控系统中最具可塑性的部分,具备易于放大信号、转换模式、传输数据以及适应多样化应用场景的优势。 1.2决定测控电路精确度的关键要素影响测控电路精确度的核心要素包括:(1)噪声与干扰的存在;(2)失调现象与漂移效应,尤其是温度引起的漂移;(3)线性表现与保真度水平;(4)输入输出阻抗的特性影响。 在这些要素中,噪声干扰与失调漂移(含温度效应)是最为关键的因素,需要给予高度关注。 1.3测控电路的适应性表现测控电路在测控系统中展现出高度的适应性,具体表现在:* 具备选择特定信号、灵活实施各类转换以及进行信号处理与运算的能力* 实现模数转换与数模转换功能* 在直流与交流、电压与电流信号之间进行灵活转换* 在幅值、相位、频率与脉宽信号等不同参数间进行转换* 实现量程调整功能* 对信号实施多样化的处理与运算,如计算平均值、差值、峰值、绝对值,进行求导数、积分运算等,以及实现非线性环节的线性化处理、逻辑判断等操作1.4测量电路输入信号类型对电路结构设计的影响测量电路的输入信号类型对其电路结构设计产生显著影响。 依据传感器的类型差异,输入信号的形态也呈现多样性。 主要可分为...
高效的多分辨率融合技术对具有标签不确定性的遥感数据进行处理(Matlab代码实现)内容概要:本文介绍了基于Matlab代码实现的高效多分辨率融合技术,用于处理具有标签不确定性的遥感数据。该方法通过融合不同分辨率的遥感图像,提升数据的空间与光谱信息一致性,有效应对遥感数据中标注不准确或模糊的问题,从而提高后续分类、检测或识别任务的精度与鲁棒性。文中详细阐述了算法的核心流程,包括多尺度数据配准、特征提取、不确定性建模及融合策略优化,并提供了完整的Matlab实现代码,便于科研人员复现实验并进行二次开发。; 适合人群:具备一定遥感图像处理基础和Matlab编程能力的研究生、科研人员及从事地理信息系统、环境监测、城市规划等相关领域的技术人员。; 使用场景及目标:①应用于土地利用分类、环境变化监测、灾害评估等存在标注误差的实际遥感项目中;②旨在提升遥感数据分析的准确性与可靠性,特别是在训练样本有限或标签质量较低的情况下;③为相关领域提供可复现的技术方案与代码参考。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现细节,重点关注多分辨率配准与不确定性融合模块的设计逻辑,同时可尝试在自有数据集上进行迁移实验以加深理解。

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧