[英]MS-Access query to exclude matching rows under specific conditions
假設我的公司生產鏈輪和小部件。 每種都有2種不同的類型。
表A
Product ProductLine
Widget1 Widget
Widget2 Widget
Sprocket1 Sprocket
Sprocket2 Sprocket
還可以說,組裝小部件和鏈輪總共需要5個零件。
表B
Part Product
PartA Widget1
PartB Widget2
PartC Sprocket1
PartD Sprocket2
PartE Widget1
partE Widget2
partE Sprocket1
PartE Sprocket2
公司總裁決定停止生產所有鏈輪。 什么MS-Access查詢可以返回僅用於鏈輪生產的所有零件的列表?
SELECT Part
FROM B
WHERE NOT EXISTS
(SELECT *
FROM A
WHERE A.Product = B.Product
AND A.ProductLine = "Widget")
這將返回未在Widgets生產線中使用的所有零件,即Sprockets使用的所有零件。 但是它還包括在Widget行中使用的PartE。
SQl不是我的強項。 我意識到NOT EXISTS / Widget和EXISTS / Sprocket將給出相同的結果集。 我的問題是嘗試過濾掉用於小部件和鏈輪的零件。 實際上,有2條以上的產品線,因此使用類似COUNT()= 1的方式並不是很有幫助。
這不是家庭作業。 我的公司既不生產Widget也不生產Sprockets,但比喻是100%不可行。 :)
謝謝。
該查詢直接轉到產品線,並請求小部件生產中未使用的所有零件。
select part from tableb
where part not in (select part from tableb
inner join tablea on tableb.product=tablea.product
where tablea.productline='Widget')
由於您只需要零件清單,因此我嘗試對其進行簡化。
SELECT DISTINCT PART FROM B WHERE PRODUCT LIKE '*SPROCKET*' and PART NOT IN (SELECT PART FROM B WHERE PRODUCT LIKE '*WIDGET*')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.