View Single Post

   
  #1 (permalink)  
Old 02-28-2008, 06:26 PM
Matt Creely
 
Posts: n/a
Default Tough Problem, need help

I have a very strange database with a very strange problem.

Consider 4 tables:

Table1:
----------------
Table1ID INT PK
Table2ID INT FK
Table3ID INT FK
OrderNo VARCHAR(50)

Table2
----------------
Table2ID INT PK
Table4ID INT FK

Table3
----------------
Table3ID INT PK
Table2ID INT FK

Table4
----------------
Table4ID INT PK
OrderTotal VARCHAR(50)


With Data:

Table1:
------------
1 1 NULL 90001
2 2 NULL 90002
3 NULL 1 90003
4 NULL 2 90004

Table2:
------------
1 1
2 1

Table3:
------------
1 1
2 2

Table4:
------------
1 500
2 1000


Table1 can have either a Table2ID OR a Table3ID but not both.


This is the query I'm attempting:
---------------------------

SELECT dbo.Table1.OrderNo, dbo.Table4.OrderTotal
FROM dbo.Table1 LEFT OUTER JOIN
dbo.Table4 INNER JOIN
dbo.Table2 ON dbo.Table4.Table4ID =
dbo.Table2.Table4ID INNER JOIN
dbo.Table3 ON dbo.Table2.Table2ID =
dbo.Table3.Table3ID ON dbo.Table1.Table2ID = dbo.Table2.Table2ID AND
dbo.Table1.Table3ID = dbo.Table3.Table3ID


Which gives me:
---------------------------
90001 NULL
90002 NULL
90003 NULL
90004 NULL

When I really want:
----------------------------
90001 500
90002 500
90003 500
90003 1000 (NOT 500)


I don't know how to do this. Are any of you sql guru's up to the
challenge?

Thanks in advance

-Matt

p.s. sql to recreate tables included



CREATE TABLE [dbo].[Table1] (
[Table1ID] [int] IDENTITY (1, 1) NOT NULL ,
[OrderNo] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Table2ID] [int] NULL ,
[Table3ID] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Table2] (
[Table2ID] [int] IDENTITY (1, 1) NOT NULL ,
[Table4ID] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Table3] (
[Table3ID] [int] IDENTITY (1, 1) NOT NULL ,
[Table2ID] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Table4] (
[Table4ID] [int] IDENTITY (1, 1) NOT NULL ,
[OrderTotal] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table1] WITH NOCHECK ADD
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
[Table1ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table2] WITH NOCHECK ADD
CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
(
[Table2ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table3] WITH NOCHECK ADD
CONSTRAINT [PK_Table3] PRIMARY KEY CLUSTERED
(
[Table3ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table4] WITH NOCHECK ADD
CONSTRAINT [PK_Table4] PRIMARY KEY CLUSTERED
(
[Table4ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table1] ADD
CONSTRAINT [FK_Table1_Table2] FOREIGN KEY
(
[Table2ID]
) REFERENCES [dbo].[Table2] (
[Table2ID]
),
CONSTRAINT [FK_Table1_Table3] FOREIGN KEY
(
[Table3ID]
) REFERENCES [dbo].[Table3] (
[Table3ID]
)
GO

ALTER TABLE [dbo].[Table3] ADD
CONSTRAINT [FK_Table3_Table2] FOREIGN KEY
(
[Table3ID]
) REFERENCES [dbo].[Table2] (
[Table2ID]
)
GO
Reply With Quote