【问题标题】:How to write inner join with sub query in SQL Server?如何在 SQL Server 中编写带有子查询的内连接?
【发布时间】:2021-04-17 20:31:42
【问题描述】:

如何在 SQL Server 中与子查询进行内连接?

我有一个Orders 表,其中包含orderIdOrderNumber 列和另一个表Order transactions,其中包含orderIdorderstatuscode 列和orderstatuscode 值,例如'SHI'、'PAY'、'APQ '。

Orders transactions 表中,我有orderidorderstatuscode 的多条记录。

我希望在我们需要订单的所有牵引力中得到结果,它应该有 PAY 交易而不是 APQ 交易

【问题讨论】:

  • 您可以使用JOINAPPLY。你的尝试没有成功怎么办?你的尝试是什么
  • 另外,您所要求的和您所描述的您想要的似乎是两件截然不同的事情。你描述的你想要的似乎是NOT EXISTSINNER JOIN 不会这样做。
  • 让它变得简单,并且可以为您提供帮助:minimal reproducible example.

标签: sql sql-server sql-server-2012


【解决方案1】:

您提供的信息很少。话虽如此,这可能是一个很好的起点:

SELECT      *
FROM        Orders ord
INNER JOIN  OrderTransactions tra ON ord.OrderId = tra.OrderId
WHERE       tra.OrderStatusCode = 'PAY'
AND         tra.OrderId NOT IN (SELECT      OrderId
                                FROM        OrderTransactions
                                WHERE       OrderStatusCode = 'APQ')

您可以在这里查看:SQL Fiddle

【讨论】:

  • 这里的 WHERE 子句有两个条件,但是如果 OrderStatusCode = 'PAY' - 就不能是 'APQ'。 OP 可能想要 NOT EXISTS 或类似的东西。
  • @jarlh 我是的,我同意。但是我们不知道一个 orderId 是否有多个匹配记录。正如我所提到的,提供的信息非常少(读取示例数据/最小的可重现示例),我只是试图为 OP 提供一个起点。
  • @SatwikNadkarny orderId 将在 OrderTansactions 表中有多个记录
  • @Ramakrishna.p 你可以看到小提琴。这应该是你要找的
  • @jarlh 我知道我们也可以使用EXISTS 子句。但为了方便 OP,我只是让它更简单。
猜你喜欢
  • 1970-01-01
  • 2021-03-20
  • 2016-02-25
  • 1970-01-01
  • 2018-06-04
  • 2014-09-29
  • 2015-03-29
  • 2015-07-13
  • 2018-09-15
相关资源
最近更新 更多