簡體   English   中英

MS-Access查詢可排除特定條件下的匹配行

[英]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')

http://sqlfiddle.com/#!3/770e7/2

由於您只需要零件清單,因此我嘗試對其進行簡化。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM