【发布时间】:2019-10-17 21:48:02
【问题描述】:
我一直在写一个查询。这是一个简单的查询,但我有一些疑问。所以我想要一些新的方法来完成这项任务
DECLARE @ordersToSet TABLE
(
[Id] [BIGINT] NOT NULL,
[AttributeId] [BIGINT] NOT NULL
)
SELECT *
FROM dbo.Order_Attributes
WHERE OrderAttributeID IN (SELECT AttributeId
FROM @ordersToSet)
AND OrderID IN (SELECT Id
FROM @ordersToSet)
我想要的:查询应该只返回那些OrderId 和AttributeId 与临时表@ordersToSet 中的相应值匹配的Order_Attributes。
为什么我认为上面的代码会导致意想不到的结果:
@ordersToSet 表有以下行
Id | AttributeId
-------+------------
486455 | 12
OrderAttributes 表有以下内容:
OrderID | OrderAttributeID
--------+-----------------
486455 | 11
635201 | 12
在这种情况下,它不应该选择任何行,但是我怀疑它选择 A ROW 的值为 OrderId = 486455 和 AttributeId = 12
【问题讨论】:
-
你的 FROM 在哪里? ...但是,是的,你是对的,即使纠正了这种方法,也会得到不希望的结果;您应该只在两个字段上都使用 JOIN。
-
你的代码不会运行。
-
@Uueerdo 我忘了添加“FROM”。现已修复。
标签: sql sql-server tsql join