Sql 仅在收到所有订单详细信息时显示订单
我有两个表,一个是Sql 仅在收到所有订单详细信息时显示订单,sql,ms-access,Sql,Ms Access,我有两个表,一个是OrderHeader和OrderDetail表。我需要做的是检查Detail表中与OrderHeader表相关的每个记录的StatusFK 因此,如果Detail表中StatusFK=2中的所有相关记录,那么我希望在查询中显示这些记录,因为我将对OrderHeader记录运行更新,以将其状态更改为received 但是假设detail表中有6条记录与OrderHeader表相关,但6条记录中只有5条记录具有StatusFK=2,那么我不想显示它,因为它还没有准备好被归类为完全
OrderHeader
和OrderDetail
表。我需要做的是检查Detail
表中与OrderHeader
表相关的每个记录的StatusFK
因此,如果Detail
表中StatusFK=2
中的所有相关记录,那么我希望在查询中显示这些记录,因为我将对OrderHeader
记录运行更新,以将其状态更改为received
但是假设detail表中有6条记录与OrderHeader
表相关,但6条记录中只有5条记录具有StatusFK=2
,那么我不想显示它,因为它还没有准备好被归类为完全接收
我希望有人能理解我说的话,并希望能帮助我实现这一目标 在SQL中,诀窍是在LEFT JOIN中查询未收到状态的订单详细信息,并测试不存在不需要状态的行
由于不知道您的MS Access版本,我无法保证确切的语法,但是类似于下面的查询应该可以做到这一点
SELECT OrderHeader.*, OrderDetail.* FROM OrderDetail
JOIN OrderHeader ON HeaderFK = HeaderID
LEFT JOIN OrderDetail AS OrderDetailNotReceived ON OrderDetailNotReceived.HeaderFK = HeaderID AND OrderDetailNotReceived.StatusFK < 2
WHERE OrderDetailNotReceived.DetailID IS NULL;
从OrderDetail中选择OrderHeader.*、OrderDetail.*
在HeaderFK=HeaderID上加入OrderHeader
在OrderDetailNotReceived.HeaderFK=HeaderID和OrderDetailNotReceived.StatusFK上以OrderDetailNotReceived的形式左连接OrderDetail
其中OrderDetailNotReceived.DetailID为空;
在SQL中,诀窍是在“左联接”中查询未收到状态的订单详细信息,并测试不存在不需要状态的行
由于不知道您的MS Access版本,我无法保证确切的语法,但是类似于下面的查询应该可以做到这一点
SELECT OrderHeader.*, OrderDetail.* FROM OrderDetail
JOIN OrderHeader ON HeaderFK = HeaderID
LEFT JOIN OrderDetail AS OrderDetailNotReceived ON OrderDetailNotReceived.HeaderFK = HeaderID AND OrderDetailNotReceived.StatusFK < 2
WHERE OrderDetailNotReceived.DetailID IS NULL;
从OrderDetail中选择OrderHeader.*、OrderDetail.*
在HeaderFK=HeaderID上加入OrderHeader
在OrderDetailNotReceived.HeaderFK=HeaderID和OrderDetailNotReceived.StatusFK上以OrderDetailNotReceived的形式左连接OrderDetail
其中OrderDetailNotReceived.DetailID为空;
在SQL中,诀窍是在“左联接”中查询未收到状态的订单详细信息,并测试不存在不需要状态的行
由于不知道您的MS Access版本,我无法保证确切的语法,但是类似于下面的查询应该可以做到这一点
SELECT OrderHeader.*, OrderDetail.* FROM OrderDetail
JOIN OrderHeader ON HeaderFK = HeaderID
LEFT JOIN OrderDetail AS OrderDetailNotReceived ON OrderDetailNotReceived.HeaderFK = HeaderID AND OrderDetailNotReceived.StatusFK < 2
WHERE OrderDetailNotReceived.DetailID IS NULL;
从OrderDetail中选择OrderHeader.*、OrderDetail.*
在HeaderFK=HeaderID上加入OrderHeader
在OrderDetailNotReceived.HeaderFK=HeaderID和OrderDetailNotReceived.StatusFK上以OrderDetailNotReceived的形式左连接OrderDetail
其中OrderDetailNotReceived.DetailID为空;
在SQL中,诀窍是在“左联接”中查询未收到状态的订单详细信息,并测试不存在不需要状态的行
由于不知道您的MS Access版本,我无法保证确切的语法,但是类似于下面的查询应该可以做到这一点
SELECT OrderHeader.*, OrderDetail.* FROM OrderDetail
JOIN OrderHeader ON HeaderFK = HeaderID
LEFT JOIN OrderDetail AS OrderDetailNotReceived ON OrderDetailNotReceived.HeaderFK = HeaderID AND OrderDetailNotReceived.StatusFK < 2
WHERE OrderDetailNotReceived.DetailID IS NULL;
从OrderDetail中选择OrderHeader.*、OrderDetail.*
在HeaderFK=HeaderID上加入OrderHeader
在OrderDetailNotReceived.HeaderFK=HeaderID和OrderDetailNotReceived.StatusFK上以OrderDetailNotReceived的形式左连接OrderDetail
其中OrderDetailNotReceived.DetailID为空;
如果我理解正确,您只需要OrderHeader,其中订单详细信息记录的计数等于状态fk为2的OrderDetails的计数
您可以使用SUM/IIF并将其与HAVING子句中的详细记录计数进行比较
SELECT OrderHeader.OrderID, OrderHeader.Name
FROM OrderHeader
INNER JOIN OrderDetail
ON OrderHeader.OrderId = OrderDetail.OrderId
GROUP BY OrderHeader.OrderID, OrderHeader.Name
HAVING
Count(OrderDetail.OrderId ) = SUM(IiF (OrderDetail.StatusFK = 2 ,1,0) )
如果我理解正确,您只需要OrderHeader,其中order detail记录的计数等于statusFK为2的OrderDetails的计数
您可以使用SUM/IIF并将其与HAVING子句中的详细记录计数进行比较
SELECT OrderHeader.OrderID, OrderHeader.Name
FROM OrderHeader
INNER JOIN OrderDetail
ON OrderHeader.OrderId = OrderDetail.OrderId
GROUP BY OrderHeader.OrderID, OrderHeader.Name
HAVING
Count(OrderDetail.OrderId ) = SUM(IiF (OrderDetail.StatusFK = 2 ,1,0) )
如果我理解正确,您只需要OrderHeader,其中order detail记录的计数等于statusFK为2的OrderDetails的计数
您可以使用SUM/IIF并将其与HAVING子句中的详细记录计数进行比较
SELECT OrderHeader.OrderID, OrderHeader.Name
FROM OrderHeader
INNER JOIN OrderDetail
ON OrderHeader.OrderId = OrderDetail.OrderId
GROUP BY OrderHeader.OrderID, OrderHeader.Name
HAVING
Count(OrderDetail.OrderId ) = SUM(IiF (OrderDetail.StatusFK = 2 ,1,0) )
如果我理解正确,您只需要OrderHeader,其中order detail记录的计数等于statusFK为2的OrderDetails的计数
您可以使用SUM/IIF并将其与HAVING子句中的详细记录计数进行比较
SELECT OrderHeader.OrderID, OrderHeader.Name
FROM OrderHeader
INNER JOIN OrderDetail
ON OrderHeader.OrderId = OrderDetail.OrderId
GROUP BY OrderHeader.OrderID, OrderHeader.Name
HAVING
Count(OrderDetail.OrderId ) = SUM(IiF (OrderDetail.StatusFK = 2 ,1,0) )
感谢您的帮助这是我完成的查询,看起来它正在发挥作用,我只需要将它合并到我的更新查询中
SELECT tblOrder.OrderPK
FROM tblOrder
INNER JOIN tblOrderDetail
ON tblOrder.OrderPK = tblOrderDetail.OrderFK
GROUP BY tblOrder.OrderPK
HAVING
Count(tblOrderDetail.OrderFK ) = SUM(IiF (tblOrderDetail.StatusFK = 2 ,1,0) )
感谢您的帮助这是我完成的查询,看起来它正在发挥作用,我只需要将它合并到我的更新查询中
SELECT tblOrder.OrderPK
FROM tblOrder
INNER JOIN tblOrderDetail
ON tblOrder.OrderPK = tblOrderDetail.OrderFK
GROUP BY tblOrder.OrderPK
HAVING
Count(tblOrderDetail.OrderFK ) = SUM(IiF (tblOrderDetail.StatusFK = 2 ,1,0) )
感谢您的帮助这是我完成的查询,看起来它正在发挥作用,我只需要将它合并到我的更新查询中
SELECT tblOrder.OrderPK
FROM tblOrder
INNER JOIN tblOrderDetail
ON tblOrder.OrderPK = tblOrderDetail.OrderFK
GROUP BY tblOrder.OrderPK
HAVING
Count(tblOrderDetail.OrderFK ) = SUM(IiF (tblOrderDetail.StatusFK = 2 ,1,0) )
感谢您的帮助这是我完成的查询,看起来它正在发挥作用,我只需要将它合并到我的更新查询中
SELECT tblOrder.OrderPK
FROM tblOrder
INNER JOIN tblOrderDetail
ON tblOrder.OrderPK = tblOrderDetail.OrderFK
GROUP BY tblOrder.OrderPK
HAVING
Count(tblOrderDetail.OrderFK ) = SUM(IiF (tblOrderDetail.StatusFK = 2 ,1,0) )
我刚刚意识到我上面的查询是只读的,因为它包含总计,我需要能够将它链接到一个可更新的查询中
有没有一个简单的方法来解决这个问题
谢谢我刚刚意识到我上面的查询是只读的,因为它包含总计,我需要能够将它链接到一个可更新的查询中
有没有一个简单的方法来解决这个问题
谢谢我刚刚意识到我上面的查询是只读的,因为它包含总计,我需要能够将它链接到一个可更新的查询中
有没有一个简单的方法来解决这个问题
谢谢我刚刚意识到我上面的查询是只读的,因为它包含总计,我需要能够将它链接到一个可更新的查询中
有没有一个简单的方法来解决这个问题
谢谢