我编写了一个查询,用于从工作表中选择那些也存在于WorkOrder表中的记录。这很酷但现在我想选择那些存在于Works但不存在于WorkOrders中的记录。
我已经编写了这个查询,但这会返回错误的结果。
Select w.NIT_No, w.WorkNo, wo.Amount, wo.Rate, wo.Quantity, wo.Unit, wo.ItemCode, wo.WorkOrderBoqID,
wo.WorkOrderIssueDate from Works w
inner join WorkOrderBOQ wo
on w.WorkNo != wo.Work_No and w.NIT_No != wo.NIT_No
我已将!=置于ON。
答案 0 :(得分:3)
正在工作。你只是期望它做一些与众不同的事情。它产生了两个值不同的每一对。
你可能打算:
Select w.NIT_No, w.WorkNo, wo.Amount, wo.Rate, wo.Quantity, wo.Unit,
wo.ItemCode, wo.WorkOrderBoqID, wo.WorkOrderIssueDate
from Works w left join
WorkOrderBOQ wo
on w.WorkNo = wo.Work_No and w.NIT_No = wo.NIT_No
where wo.WorkNo is null;
请注意,从wo
中选择列列并没有任何帮助,因为它们都是NULL
。因此,这种逻辑通常使用not exists
:
Select w.NIT_No, w.WorkNo
from Works w
where not exists (select 1
from WorkOrderBOQ wo
where w.WorkNo = wo.Work_No and w.NIT_No = wo.NIT_Nowo.WorkNo
);
答案 1 :(得分:0)
您只需要一个左表连接,右表中包含Null条目。试试这个查询 -
SELECT w.NIT_No
,w.WorkNo
,wo.Amount
,wo.Rate
,wo.Quantity
,wo.Unit
,wo.ItemCode
,wo.WorkOrderBoqID
,wo.WorkOrderIssueDate
FROM Works w
LEFT JOIN WorkOrderBOQ wo ON w.WorkNo = wo.Work_No
AND w.NIT_No = wo.NIT_No
WHERE wo.Work_No IS NULL
AND wo.NIT_No IS NULL