2
SELECT C.CarID, C.Make, Y.Year, M.Model , e.Engine
FROM Car C 
INNER JOIN CarYear CY ON CY.CarID = C.CarID
INNER JOIN Year y     ON y.YearID = CY.YearID
INNER JOIN Model m    ON m.CarID = C.CarID
INNER JOIN Engine e   ON e.ModelId = m.ModelID

私は SQL SERVER を初めて使用します。この問題の解決方法を教えてください。すべての表、車、年、モデル、エンジンを分けます。ブリッジ テーブル dbo.CarYear と dbo.ModelYear にクロス結合を設定すると、このクエリが作成され、結果は次のようになります。

1   Acura   1999    ILX 1.5 L LR ELECT/GAS
1   Acura   1999    ILX 2.0 L L4 SOHC
1   Acura   1999    ILX 2.4 L L4 DOHC
1   Acura   1999    RDX 3.5 L V6
1   Acura   1999    RLX 3.5 L V6
1   Acura   1999    MDX 3.7 L V6
1   Acura   2000    ILX 1.5 L LR ELECT/GAS
1   Acura   2000    ILX 2.0 L L4 SOHC
1   Acura   2000    ILX 2.4 L L4 DOHC
1   Acura   2000    RDX 3.5 L V6
1   Acura   2000    RLX 3.5 L V6
1   Acura   2000    MDX 3.7 L V6
1   Acura   2001    ILX 1.5 L LR ELECT/GAS
1   Acura   2001    ILX 2.0 L L4 SOHC
1   Acura   2001    ILX 2.4 L L4 DOHC
1   Acura   2001    RDX 3.5 L V6
1   Acura   2001    RLX 3.5 L V6
1   Acura   2001    MDX 3.7 L V6
1   Acura   2002    ILX 1.5 L LR ELECT/GAS
1   Acura   2002    ILX 2.0 L L4 SOHC
1   Acura   2002    ILX 2.4 L L4 DOHC
1   Acura   2002    RDX 3.5 L V6
1   Acura   2002    RLX 3.5 L V6
1   Acura   2002    MDX 3.7 L V6
1   Acura   2003    ILX 1.5 L LR ELECT/GAS
1   Acura   2012    ILX 1.5 L LR ELECT/GAS
1   Acura   2012    ILX 2.0 L L4 SOHC
1   Acura   2012    ILX 2.4 L L4 DOHC
1   Acura   2012    RDX 3.5 L V6
1   Acura   2012    RLX 3.5 L V6
1   Acura   2012    MDX 3.7 L V6
1   Acura   2013    ILX 1.5 L LR ELECT/GAS
1   Acura   2013    ILX 2.0 L L4 SOHC
1   Acura   2013    ILX 2.4 L L4 DOHC
1   Acura   2013    RDX 3.5 L V6
1   Acura   2013    RLX 3.5 L V6
1   Acura   2013    MDX 3.7 L V6

ご覧のとおり、どの年のすべての Acura にも同じモデルがあります。たとえば、ブリッジ テーブルにデータを入力する前に一部の Car モデルを削除するにはどうすればよいですか (たとえば、Acura ILX は 2013 年からのみ開始されました)。

4

4 に答える 4

1

テーブルにデータを入力するクエリに WHERE 句を追加するだけでよいと思います。

WHERE not (c.Make='Acura' and m.Model='ILX' and y.Year=2013)
于 2013-09-19T19:44:06.540 に答える
0

これは「セットベース」のアプローチです...多くの AND、OR 条件を使用する代わりに、#DontWantEm テーブルにアイテムを配置できます。

AND、OR条件が無効なアプローチであると言っているのではありません。「欲しくない」アイテムを手で選ぶ必要がある場合、これは代替手段だと言っています.

Use Northwind
GO


IF OBJECT_ID('tempdb..#MasterTable') IS NOT NULL
begin
        drop table #MasterTable
end


IF OBJECT_ID('tempdb..#DontWantEm') IS NOT NULL
begin
        drop table #DontWantEm
end



CREATE TABLE #MasterTable 
( 
    [CustomerID] [nchar](5) NULL,
    [OrderID] [int] NOT NULL,
    [ProductID] [int] NULL
)




CREATE TABLE #DontWantEm 
( 
    [CustomerID] [nchar](5) NULL,
    [OrderID] [int] NOT NULL,
    [ProductID] [int] NULL
)


INSERT INTO #MasterTable ( CustomerID , OrderID , ProductID) 
select c.CustomerID , o.OrderID , od.ProductID
from 
dbo.Customers c 
join dbo.Orders o on c.CustomerID = o.CustomerID 
join dbo.[Order Details] od on o.OrderID = od.OrderID

INSERT INTO #DontWantEm ( CustomerID , OrderID , ProductID) 
select top 300 CustomerID , OrderID , ProductID
from #MasterTable


select * from #MasterTable mt
where not exists (select null from #DontWantEm dwe where
dwe.CustomerID = mt.CustomerID and dwe.OrderID = mt.OrderID and dwe.ProductID = mt.ProductID )



IF OBJECT_ID('tempdb..#DontWantEm') IS NOT NULL
begin
        drop table #DontWantEm
end

IF OBJECT_ID('tempdb..#MasterTable') IS NOT NULL
begin
        drop table #MasterTable
end
于 2013-09-19T19:51:18.443 に答える