sql查询两列包含关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询两列包含关系相关的知识,希望对你有一定的参考价值。

如图:规则是这样的,class_Id中的前三位是继承的school_Id,student_Id中的前六位是继承的class_Id.
因为这些编号是手动编写的,很有可能出错。
现在我想知道:
1.要怎么用sql语句查询出来没有按照规范编写的这一条记录。
2.在excell 2007 中又怎么查询.

怕像上次一样没人回答,所以答完之后再给50分。相信我.

select
*
from
表名
where
[col1]
like
convert(nvarchar,'%'+(select
col2
from
dbo.userinfo
where
条件)+'%')
//注意
因为
like
'%%这里面的模糊查询数量唯一
所以
(select
col2
from
dbo.userinfo
where
条件)
必须唯一
这里就不能再有几个条件了
追问:
如果数据是在两张表呢?即表a
col1
大连市中山区
表b
col2
中山
怎样能查处col1包含col2的数据呢?
回答:
select
*
from
表名1
where
[col1]
like
convert(nvarchar,'%'+(select
col2
from
表名2
where
条件)+'%')
这里有2个
%
如果你想要
中山%就去掉前面一个
具体点就是
如果

%中山
就去掉后面一个比如你要选择
col1
的数据要和某个酒店所在的地方
比如
表b
col3
中存的是酒店名称
酒店是
万达酒店
对应的
col2是
中山
select
*
from
表名1
where
[col1]
like
convert(nvarchar,'%'+(select
col2
from
表名2
where
col3
='万达酒店')+'%')
这样就筛选出了
所有和万达酒店所在地方名字类似的地区了
参考技术A 数据库是sql server:
select * from yourtable where (substring(class_id,1,3)<>school_id) or (substring(student_id,1,6)<>class_id)
如果你用的是ACCESS,把substring换成mid就可以了

在EXCEL中你得自己写VBA,用ODBC驱动连接数据库,然后执行上面的语句,就能得到结果了,具体的我也不会弄,因为我基本不用OFFICE编程,你搜索下,应该很容易
参考技术B 1.
select * from 表
where left(class_Id,3)<>school_Id
or left(student_Id,6)<>class_Id
2.
excel 可以添加一个辅助列
=IF(TRIM(B1)=LEFT(TRIM(C1),3),IF(TRIM(C1)=LEFT(TRIM(D1),6),"T","F"),"F")
里面加上这个公式
其中 B 是 school_Id列 C 是 class_Id列 D 是 student_Id列
选出这个辅助列为“F” 的本回答被提问者采纳
参考技术C 问题1,应该写个存储过程吧。
遍历每条记录,进行比对,应该很简单的。

个人意见,仅供参考,如有误,请指正。

Sql更新查询[重复]

【中文标题】Sql更新查询[重复]【英文标题】:Sql Update Query [duplicate] 【发布时间】:2013-02-09 00:10:53 【问题描述】:

我有一个表T1,其中包含三列:Id, Name, Address

还有另一个表T2,其中包含两列Id, New_AddressT2Id 列与 T1 的列相同。

我需要一个查询,它会将T1Address 列更新为T2New_Address

我可以通过检查 ID 并执行更新语句通过循环来完成。怎么可以通过查询来完成?

【问题讨论】:

【参考方案1】:

怎么样

UPDATE T1
SET Address = T2.New_Address
FROM T2
WHERE T1.id = T2.id

【讨论】:

【参考方案2】:
UPDATE T1
SET T1.Address = T2.New_Address
FROM T1
INNER JOIN T2 ON T2.ID = T1.ID

【讨论】:

【参考方案3】:
UPDATE T1
SET Address = (select New_Address from T2 where T1.ID=T2.ID );

【讨论】:

这 - 相当于 LEFT JOIN 并且 - 还将更新(将它们设置为 NULL)表 1 中在表 2 中没有 NewAdress 的所有行。 @ypercube - 这个查询确实有一个可能的优点是,如果有多个匹配的新地址而不是默默地选择一个不确定的地址,它将引发错误。它可以重写为SET Address = ISNULL((select New_Address from T2 where T1.ID=T2.ID ),Address);,尽管MERGE 也提供了内置的错误检查功能,并且更可取。

以上是关于sql查询两列包含关系的主要内容,如果未能解决你的问题,请参考以下文章

SQL 基础语句

SQL中如何将两列拼接

SQL查询从两列中检索两个日期之间的数据

sql 合并列查询

选择SQL中两列之间的关系

Sql更新查询[重复]