作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
鉴于以下情况:
declare @a table
(
pkid int,
value int
)
declare @b table
(
otherID int,
value int
)
insert into @a values (1, 1000)
insert into @a values (1, 1001)
insert into @a values (2, 1000)
insert into @a values (2, 1001)
insert into @a values (2, 1002)
insert into @b values (-1, 1000)
insert into @b values (-1, 1001)
insert into @b values (-1, 1002)
如何查询@a中与@b完全匹配的所有值?
{@a.pkid = 1, @b.otherID = -1}
不会返回(只有 3 个值中的 2 个匹配)
{@a.pkid = 2, @b.otherID = -1}
将返回(3 个值中的 3 个匹配)
重构表是一种选择。
编辑:我已经从 James 和 Tom H 的答案中获得了成功。
当我在 @b 中添加另一个案例时,它们有点不足。
insert into @b values (-2, 1000)
假设这应该返回另外两行({@a.pkid = 1, @b.otherID = -2}
和 {@a.pkid = 2, @b.otherID = -2}
,它不起作用。但是,对于我的项目来说这不是问题。
最佳答案
这样效率更高(它使用 TOP 1
而不是 COUNT
),并且可以与 (-2, 1000)
配合使用:
SELECT *
FROM (
SELECT ab.pkid, ab.otherID,
(
SELECT TOP 1 COALESCE(ai.value, bi.value)
FROM (
SELECT *
FROM @a aii
WHERE aii.pkid = ab.pkid
) ai
FULL OUTER JOIN
(
SELECT *
FROM @b bii
WHERE bii.otherID = ab.otherID
) bi
ON ai.value = bi.value
WHERE ai.pkid IS NULL OR bi.otherID IS NULL
) unmatch
FROM
(
SELECT DISTINCT pkid, otherid
FROM @a a , @b b
) ab
) q
WHERE unmatch IS NOT NULL
关于sql-server - T-SQL : How do I get the rows from one table whose values completely match up with values in another table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/103829/
我是一名优秀的程序员,十分优秀!