我想把A表 ID (int字段自动增长 ) 插入到B表 Ids(varchar50字段)格式为(1,2,3,4)
这样的插入语句得怎么写,还有就是通过b表的ids里面的数据查询对应的A表数据这个查询语句,求指导,或者是将A表ID的内容在插入的时候自动赋值到A表Ids中
最好说明一下用的什么数据库,mysql用 find_in_set()查询,插入需要看需求了
什么数据库,Oracle用 find_in_set()查询,按需插入
select * from A where (select Ids from B where ) LIKE '%'+ cast (Id as varchar(50)) + '%' 我的查询是这么写的, 插入是直接数组进去的
如果是Oracle用cast(ld as verchar(50)+%)
sql server里面你想把a表的id根据条件查询出来,然后变成'1,2,3,4'这样的数据,然后插入b表中对吗?
如果是这样,你先把a表查询出来的数据拼成一个串,可以使用for xml path(''),然后插入b表
可以参考:https://blog.csdn.net/mango_love/article/details/51210020
这是将A表的ID转成成IDs字符串的语句。
INSERT B表( IDs )
SELECT CONVERT( VARCHAR, ID ) + ',' FROM A表 WHERE 条件
FOR XML PATH('')
反过来查询的话,要麻烦一点。
DECLARE @ls1 VARCHAR(2000 )
SELECT @ls1='SELECT * FROM A表 WHERE ID IN( ' + SELECT IDs FROM B表 WHERE 条件 + ')'
EXECUTE( @ls1 )
如果你想在程序中得到这个查询结果,最好写成存储过程了。这样子调用比较方便。
也可以定义一个临时表,与A表一致,这样子,就可以将EXECUTE( @ls1 )的结果插入到临时表中,再访问临时表就可以了。
SELECT @ls1='SELECT * FROM A表 WHERE ID IN( ' + SELECT IDs FROM B表 WHERE 条件 + ')'
这个地方要处理一下,因为最后面有一个逗号为导致查询失败。所以,修改一下语句为:
DECLARE @lsIDs
SELECT @lsIDs = SELECT Top 1 IDs FROM B表 WHERE 条件
SELECT @ls1='SELECT * FROM A表 WHERE ID IN( ' + SUBSTRING( lsIDs, 1, LEN( lsIDs ) - 1 ), + ')'
【通过b表的ids里面的数据查询对应的A表数据这个查询语句】也可以这样子写:
SELECT * FROM A表 WHERE CHARINDEX( ',' + CONVERT( VARCHAR, ID ) + ',', ',' + ( SELECT IDs FROM B表 WHERE 条件 ) ) > 0
或
SELECT * FROM A表 WHERE ',' + ( SELECT IDs FROM B表 WHERE 条件 ) LIKE '%,' + CONVERT( VARCHAR, ID ) + ',%'