【问题标题】:SQL Server Select with two IN clause in conditionsSQL Server Select 在条件中有两个 IN 子句
【发布时间】: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)

我想要的:查询应该只返回那些OrderIdAttributeId 与临时表@ordersToSet 中的相应值匹配的Order_Attributes

为什么我认为上面的代码会导致意想不到的结果:

@ordersToSet 表有以下行

    Id     | AttributeId
    -------+------------
    486455 | 12

OrderAttributes 表有以下内容:

    OrderID | OrderAttributeID
    --------+-----------------
    486455  | 11
    635201  | 12

在这种情况下,它不应该选择任何行,但是我怀疑它选择 A ROW 的值为 OrderId = 486455AttributeId = 12

【问题讨论】:

  • 你的 FROM 在哪里? ...但是,是的,你是对的,即使纠正了这种方法,也会得到不希望的结果;您应该只在两个字段上都使用 JOIN。
  • 你的代码不会运行。
  • @Uueerdo 我忘了添加“FROM”。现已修复。

标签: sql sql-server tsql join


【解决方案1】:

查询应该只返回OrderIdAttributeId 与临时表@ordersToSet 中的相应值匹配的Order_Attributes

你似乎在寻找一个简单的JOIN

SELECT a.*
FROM dbo.Order_Attributes a 
INNER JOIN @ordersToSet s
    ON a.OrderAttributeID = s.AttributeId AND a.OrderID = s.Id

【讨论】:

  • 我认为您的意思如下: SELECT a.* FROM dbo.Order_Attributes a INNER JOIN @ordersToSet s on s.AttributeId = a.OrderAttributeID AND a.OrderID = s.Id
  • @DavronbekRahmonov:确实如此。固定。
  • 欢迎@DavronbekRahmonov!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
相关资源
最近更新 更多