tags:

views:

635

answers:

2

There are some tables that we want to do a search I couldn't understand why this error happens , please help I should be easy for experts ,

SELECT * FROM passenger
INNER JOIN [passenger-flylist] ppff 
ON ppp.[passenger-id] = ppff.[passenger-id]

the Error :

Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "ppp.passenger-id" could not be bound.

Tables are :

CREATE TABLE [dbo].[passenger](
    [passenger-id] [int] IDENTITY(1,1) NOT NULL,
    [name] [char](50) COLLATE Arabic_CI_AS NOT NULL,
    [sex] [char](10) COLLATE Arabic_CI_AS NULL,
    [mobile] [char](20) COLLATE Arabic_CI_AS NULL,
    [address] [varchar](50) COLLATE Arabic_CI_AS NULL,
    [flylist-id] [int] NOT NULL,
    [chair-number] [char](10) COLLATE Arabic_CI_AS NOT NULL,
    [Age] [char](10) COLLATE Arabic_CI_AS NULL,
    [ticket-number] [char](10) COLLATE Arabic_CI_AS NULL,
 CONSTRAINT [PK_passenger] PRIMARY KEY CLUSTERED 
(
    [passenger-id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

Second

CREATE TABLE [dbo].[flylist](
    [flylist-id] [int] IDENTITY(1,1) NOT NULL,
    [fly-number] [varchar](50) COLLATE Arabic_CI_AS NOT NULL,
    [go-date] [char](15) COLLATE Arabic_CI_AS NOT NULL,
    [return-date] [char](15) COLLATE Arabic_CI_AS NOT NULL,
    [go-time] [char](5) COLLATE Arabic_CI_AS NOT NULL,
    [return-time] [char](5) COLLATE Arabic_CI_AS NOT NULL,
    [start-from] [varchar](50) COLLATE Arabic_CI_AS NOT NULL,
    [destination] [varchar](50) COLLATE Arabic_CI_AS NULL,
    [airline-company-id] [int] NOT NULL,
    [airplane-id] [int] NOT NULL,
 CONSTRAINT [PK_flylist] PRIMARY KEY CLUSTERED 
(
    [flylist-id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

Third

CREATE TABLE [dbo].[passenger-flylist](
    [passenger-id] [int] NOT NULL,
    [flylist-id] [int] NOT NULL,
 CONSTRAINT [PK_passenger-flylist] PRIMARY KEY CLUSTERED 
(
    [passenger-id] ASC,
    [flylist-id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
USE [AirlineSx]
GO
ALTER TABLE [dbo].[passenger-flylist]  WITH CHECK ADD  CONSTRAINT [FK_passenger-flylist_passenger-flylist] FOREIGN KEY([passenger-id], [flylist-id])
REFERENCES [dbo].[passenger-flylist] ([passenger-id], [flylist-id])

If I had problem in setting the relations , please tell me how to do ,

thanks

Edited Part

Thanks , I found that in parallel with you , but I got another error :
   ( In my real code I want to get Passenger-id , but it doesn't allow me )

SELECT [passenger-id] FROM passenger ppp -- <<<< This line
INNER JOIN [passenger-flylist] ppff 
ON ppp.[passenger-id] = ppff.[passenger-id]
INNER JOIN flylist fff ON ppff.[flylist-id] = fff.[flylist-id]
WHERE ppp.[name] = @name AND
fff.[start-from] = @flightDate AND
ppp.[ticket-number] = @ticketNo

The Error is : Msg 209, Level 16, State 1, Procedure SearchForPassenger, Line 19 Ambiguous column name 'passenger-id'.

It refers to the 1st line that we want to select [passenger-id]

+9  A: 

The problem is a missing alias ppp

SELECT * FROM passenger ppp
INNER JOIN [passenger-flylist] ppff 
ON ppp.[passenger-id] = ppff.[passenger-id]
cmsjr
I can hear him saying DOH! right about now...
magnifico
Yes , But my real code was a bit different , and there is another error
Sypress
See my comment on your post above, the new error is being caused by the fact that multiple tables you are referencing have the column name you are trying to select. You need to select ppp.[passenger-id] or select ppff.[passenger-id] to remove the ambiguity.
cmsjr
+1  A: 

As to the second problem...

As passenger-id exists in both passenger and passenger-flylist you need to specify the alias of the table.

SELECT ppp.[passenger-id] FROM passenger ppp
INNER JOIN [passenger-flylist] ppff 
ON ppp.[passenger-id] = ppff.[passenger-id]
INNER JOIN flylist fff ON ppff.[flylist-id] = fff.[flylist-id]
WHERE ppp.[name] = @name AND
fff.[start-from] = @flightDate AND
ppp.[ticket-number] = @ticketNo
Dave Barker
Really thanks , I missed that point
Sypress