从两个表中进行选择,如果某些列具有数据,则对ID进行比较,然后将其删除

时间:2019-07-20 12:57:05

标签: sql sql-server

我有两个桌子。我会把插座插进去作为参考。

插座

ID  Outlet_Name
-----------------
1   Big Bar
2   Bigger Bar

Master_Stock

ID  Stock_Name
--------------------
1   Heineken
2   Speights ALe
3   Lion Red
4   Chavey Blue
5   Tui Beer

Outlet_Stock

ID  Stock_ID  Outlet_ID
--------------------------
1   1         1
2   2         1
3   3         1

如何选择Master_Stock中的所有内容,将其与Outlet_Stock进行比较,然后根据Outlet_ID将其删除?

例如-查询将离开 Master_Stock

ID 
4
5

因为出口1已经有1、2和3。

它在Microsoft SQL Server管理中运行。

SELECT *
FROM Stock
WHERE NOT EXISTS (SELECT *
                  FROM outlet_stock
                  WHERE stock.id = outlet_stock.stock_id 
                    AND outlet_stock.outlet_id <> '1')

我希望输出中仅包含某个特定商店的主库存中没有的商品

1 个答案:

答案 0 :(得分:1)

解决方案的很大一部分是从master_stock中选择,而不是从stock中选择。然后您需要正确获得子查询:

SELECT ms.*
FROM master_stock ms
WHERE NOT EXISTS (SELECT 1
                  FROM outlet_stock os
                  WHERE ms.id = os.stock_id AND
                        os.outlet_id = 1
                 );