Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回值的正确方法_Sql_Sql Server - Fatal编程技术网

Sql 返回值的正确方法

Sql 返回值的正确方法,sql,sql-server,Sql,Sql Server,在这种情况下,如果并且只有一个成员在Members\u transaction表中没有事务,我希望从Members表中删除该成员 我还想知道该会员是否有任何交易。当前,我将返回一个值为1的列,以指示该成员至少存在一个事务,或返回值为0,以指示该成员没有事务,并且在执行此查询时已被删除。我的质询如下: IF EXISTS ( SELECT members_trans_id FROM MEMBERS_TRANSACTION WHERE member_link_id =

在这种情况下,如果并且只有一个成员在Members\u transaction表中没有事务,我希望从Members表中删除该成员

我还想知道该会员是否有任何交易。当前,我将返回一个值为1的列,以指示该成员至少存在一个事务,或返回值为0,以指示该成员没有事务,并且在执行此查询时已被删除。我的质询如下:

IF EXISTS 
( 
    SELECT members_trans_id 
    FROM MEMBERS_TRANSACTION 
    WHERE member_link_id = 188
) 
    SELECT 1 
ELSE 
    DELETE FROM Members WHERE member_link_id = 188;
    SELECT 0
我关心的是ELSE块中的两行。我可以在SQLServerManagementStudio中毫无问题地执行此查询,但我想知道这样编写是否正确

我正在使用SQLServer2008R2


谢谢。

左会合是您的朋友,速度非常快。要查看所有成员及其交易记录,请执行以下操作:

select m.Name, count(*) As TotalTransactions
from Member m
LEFT JOIN MEMBERS_TRANSACTION mt on mt.member_link_id=m.member_link_id
where mt.member_link_id is null
GROUP BY m.Name
ORDER BY m.Name
要仅查找没有事务的事务,请在末尾添加一个HAVING COUNT*=0

要干掉那些偷懒的人:

delete m
from Member m
LEFT JOIN MEMBERS_TRANSACTION mt on mt.member_link_id=m.member_link_id
where mt.member_link_id is null

我假设你想为所有成员做这件事。显然,对于单个查询,在where子句中添加它们的ID。

当您加入或提供子查询时,从这两个查询中都可以实现这一点。很好的使用连接

在SQLServer2008中,介绍在这种情况下非常好的

当我们使用以下内容时,也请阅读有关basic的好文章:-

删除此查询前始终使用“选择查询”

create table Members (member_link_id int , name varchar(50))
create table MEMBERS_TRANSACTION ( members_trans_id int , member_link_id int, name varchar(50))

insert into Members values(188,'abc'),(189,'abc1'),(190,'abc2'),(192,'abc3'),(193,'abc4')
insert into MEMBERS_TRANSACTION values(1,189,'abc'),(2,190,'abc1')

/*for select with left outer join to understand better*/
select * from Members m left outer join MEMBERS_TRANSACTION mt on m.member_link_id = mt.member_link_id

-/*1st approach*/
select * from Members m 
where not exists ( select members_trans_id from MEMBERS_TRANSACTION mt where m.member_link_id = mt.member_link_id )
and member_link_id = 188

select * from Members m 
where not exists ( select members_trans_id from MEMBERS_TRANSACTION mt where m.member_link_id = mt.member_link_id )
and member_link_id = 189

/*2nd approach with merge option, it is give error*/
MERGE Members AS m
USING (SELECT member_link_id FROM MEMBERS_TRANSACTION ) AS mt
ON mt.member_link_id = m.member_link_id
WHEN MATCHED THEN 
SELECT * from Members 
WHEN NOT MATCHED THEN
SELECT * from Members where m.member_link_id = 188

drop table member
drop table MEMBERS_TRANSACTION

只需尝试删除并检查SQL Server返回的修改行数:

DELETE FROM Members
WHERE member_link_id = 188 AND NOT EXISTS (
    SELECT *
    FROM MEMBERS_TRANSACTION 
    WHERE member_link_id = 188
) 

我建议在T-SQL中使用尽可能少的过程逻辑。C语言处理逻辑的能力更强。

我试图在一个查询(即一个数据库调用)中实现这一点。至于您给我的第二个查询,它将按成员链接id删除所选成员,即使该成员在成员事务表中有事务。很抱歉,第二个查询中存在语法错误。另一方面,第一个查询删除其成员链接id不是188的所有成员。这不是我要找的。我正在寻找一种方法来删除其成员链接id为188的成员,当且仅当该成员没有事务时。我还想知道此查询执行的结果,该成员是否已被删除,或由于现有事务尚未被删除亲爱的,请给我10分钟时间修改此内容