Tsql SQL Join 2个表,返回仅存在1个值而不存在其他值的记录
我面临返回数据记录的问题。我首先想找到一个列中存在某个值“0000”的记录,该列对两个表进行连接。下面是我的T-SQLTsql SQL Join 2个表,返回仅存在1个值而不存在其他值的记录,tsql,Tsql,我面临返回数据记录的问题。我首先想找到一个列中存在某个值“0000”的记录,该列对两个表进行连接。下面是我的T-SQL SELECT ColumnA, ColumnB, ColumnC FROM Table1, Table2 WHERE Table1.ColumnB. = Table2.ColumnB and ColumnC='0000' 这将返回所需的数据记录,其中“0000”在所有返回的记录中至少存在一次 我
SELECT ColumnA, ColumnB, ColumnC
FROM Table1, Table2
WHERE Table1.ColumnB. = Table2.ColumnB
and ColumnC='0000'
这将返回所需的数据记录,其中“0000”在所有返回的记录中至少存在一次
我的问题是,我如何做同样的事情,只返回不同的记录,其中“0000”是唯一存在一次或多次的值,并且返回的数据记录不存在其他值
非常感谢
SELECT distinct ColumnA, ColumnB
FROM Table1, Table2
WHERE Table1.ColumnB = Table2.ColumnB
and ColumnC = '0000'
except
SELECT distinct ColumnA, ColumnB
FROM Table1, Table2
WHERE Table1.ColumnB = Table2.ColumnB
and ColumnC <> '0000'
如果要使用联接
猜测栏C在表2中
SELECT distinct Table1.ColumnA, Table1.ColumnB, Table2.ColumnC
FROM Table1
JOIN Table2
on Table1.ColumnB = Table2.ColumnB
and Table2.ColumnC = '0000'
left join Table2 exclude
on Table1.ColumnB = exclude.ColumnB
and exclude.ColumnC <> '0000'
where exclude.ColumnB is null
这可能是最好的表演者
SELECT distinct Table1.ColumnA, Table1.ColumnB, Table2.ColumnC
FROM Table1
JOIN Table2
on Table1.ColumnB = Table2.ColumnB
and Table2.ColumnC = '0000'
and not exists (select * from table2 exclude
where exclude.ColumnB = Table1.ColumnB
and exclude.ColumnC <> '0000')
这里有一个使用ALL关键字的解决方案
SELECT DISTINCT
columna,
columnb,
columnc
FROM table1 t1
INNER JOIN table2 t2
ON table1.columnb = table2.columnb
WHERE t2.columnc = '0000'
AND t2.columnc = ALL (SELECT columnc
FROM table2 t2Check
WHERE t2.columnb = t2Check.columb)
在这里,我只使用一个表,因为问题中的连接实际上并不重要 你也要给出不存在和不存在的解决方案吗?@ConradFrix我想到了不存在。它可能是最好的表演者。我不知道你是否可以不加入排除区就离开?谢谢,责怪!仅供参考,第一个查询似乎不排除t2.columnc可以是“0000”以外的其他内容。我有一对多个记录,其中“0000”作为与返回记录匹配的值,但同一相关父记录不能返回和计数“0000”以外的任何值。第一个查询返回96772条记录,其他两个查询相互匹配相同的记录计数57263,也匹配Conrad Frix提供的查询。非常感谢两位如此慷慨地迅速提供了解决方案!我认为答案是一个还是两个?你确定吗?这就是except语句所做的。正确,但是带有except的查询1返回了更多记录,这是因为查询不限于仅包含值“0000”的记录。它还为表2.c提供了具有“0000”的记录,在某些情况下还提供了其他值。Table1.columnB是主键和唯一值,也与Table2.columnB中的值匹配,但是此记录具有多对一关系和匹配记录Table2.ColumnC。我想要的记录只包含汇总到table1.columnB的ID的“0000”值,而Table2.ColumnC中没有其他可能的值。+1您能理解为什么我的答案中的expect根据OPM不起作用吗?我猜OP在select子句中包含了ColumnC