>我有这样的表格:
----------
name | surname
----------
abc | def
-----------
xxx | def
----------
yyy | def
----------
Comy | Xardas
----------
例如,我声明:
declare @name varchar(10)
set @name = 'abc'
我需要获取姓氏等于@name's
姓氏的所有名字。 如果@name
为 null,则获取所有记录。在一选语句中
对列姓氏的同一表进行内部连接
SELECT *
FROM table t1
INNER JOIN table t2 ON t1.surname = t2.surname
WHERE t1.name = COALESCE(@name, t1.name)
SELECT t1.*
FROM table t1
WHERE (ISNULL(@name,0) != 0 AND t1.surname = @name) OR (ISNULL(@name,0)=0)
DECLARE @MyTable TABLE (name varchar(20), surname varchar(20))
INSERT INTO @MyTable VALUES ('abc','def'),('xxx','def'),('yyy','def'), ('Comy','Xardas')
declare @name varchar(10)
set @name = 'abc'
SELECT T.* FROM
@MyTable T
LEFT JOIN @MyTable T1 ON T.surname = T1.surname AND @name IS NOT NULL
WHERE (T.name = @name or @name IS NULL)
我认为你可以使用它:
declare @name varchar(10)
set @name = 'abc'
SELECT *
FROM YT T1
WHERE EXISTS (SELECT 1 FROM YT T2 WHERE name=@name AND T1.SURNAME=T2.SURNAME) OR @name IS NULL
示例数据
CREATE TABLE YT (name varchar(20), surname varchar(20));
INSERT INTO YT VALUES ('abc','def'),('xxx','def'),('yyy','def'), ('Comy','Xardas');
名称 = 空的输出:
name surname
abc def
xxx def
yyy def
Comy Xardas
名称 = 'abc' 的输出:
name surname
abc def
xxx def
yyy def