0

我有以下表格:

   VENDOR:          PRODUCT:           ITEM:             STORE:
-  VENDOR_ID     -  PRODUCT_ID      -  ITEM_ID        -  STORE_ID
-  VENDOR_NAME   -  PRODUCT_DESC    -  STORE_ID       -  STORE_NAME
                 -  VENDOR_ID       -  PRODUCT_ID     -  STORE_LOCATION
                                    -  ITEM_PRICE

ITEM 表本质上是商店的库存,告诉每个商店有哪些产品有库存。我想列出所有不向数据库中的任何商店提供任何产品的供应商。

这是我到目前为止所拥有的:

SELECT DISTINCT VENDOR.VENDOR_NAME AS VENDORNAME
FROM VENDOR, PRODUCT, ITEM, STORE
WHERE NOT VENDOR.VENDOR_ID = PRODUCT.VENDOR_ID
AND NOT PRODUCT.PRODUCT_ID = ITEM.PRODUCT_ID
AND NOT ITEM.STORE_ID = STORE.STORE_ID;

现在,它返回所有供应商名称。你有什么想法可以让它只返回产品不在任何商店的供应商吗?谢谢。

4

2 回答 2

0

由于 item 显示每个供应商的每个商店中有哪些产品,如果产品不在 item 表中,那么它就是您想要的。左连接将使那些为空。只需检查那些为空的项目。像这样:

select *
from vendor v
join product p on v.vendor_id = p.product_id
left join item i on p.product_id = i.product_id
where i.product_id is null

或者

查找不在项目表中的所有产品。这忽略了供应商表:

select *
from product p
where product_id not in (select product_id from item)

现在找到那些供应商

select * 
from vendor
where vendor_id in
(
   select vendor_id 
   from product p
   where product_id not in (select product_id from item)
)

这两个答案在逻辑上是相同的,第一个使用连接,第二个子查询。

于 2013-10-21T02:33:46.240 回答
0

请试试这个:

SELECT MAX(v.VENDOR_NAME) AS VENDORNAME
FROM VENDOR v
LEFT JOIN PRODUCT p ON v.endor_id = p_vendor_id
LEFT JOIN ITEM i ON p_product_id = i.product_id
GROUP BY v.vendor_id
HAVING COUNT(i.item_id) = 0;

STORE此类查询不需要表。

于 2013-10-21T02:40:03.910 回答