Home All Groups Group Topic Archive Search About
Author
8 Jun 2006 10:02 PM
S R H
I have 3 tables which have a "sortOrder" column of int datatype. I have a
UNION query which is sorting on sortOrder column:

SELECT fgs.objectid, fgs.form, fgs.sortOrder, fgs.dbColName
FROM formgenselect fgs
WHERE fgs.form = 'personal'
UNION
SELECT sf.objectid, sf.form, sf.sortOrder, sf.dbColName
FROM security_filter sf
WHERE sf.form = 'personal'
ORDER BY sortOrder

This query works ok. Now in the first part of the above i do an outer join
with the third table:

SELECT fgs.objectid, fgs.form, fgs.sortOrder, fgs.dbColName
FROM formgenselect fgs LEFT JOIN formgen fg ON (fgs.form = fg.form) and
(fgs.dbColName = fg.dbColName)
WHERE fgs.form = 'personal'
UNION
SELECT sf.objectid, sf.form, sf.sortOrder, sf.dbColName
FROM security_filter sf
WHERE sf.form = 'personal'
ORDER BY sortOrder

Here query analyzer is giving me following error message:
Server: Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'sortOrder'.

Can somebody explain it to why it works in first case but not in the second
case. What is the solution?

Thanks

Author
8 Jun 2006 10:08 PM
S R H
Here is the DDL:

CREATE TABLE [dbo].[FORMGENSELECT] (
[objectId] [T_IDENTIFIER] IDENTITY (1, 1) NOT NULL ,
[form] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[sortOrder] [int] NULL ,
[dbColName] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FORMGENSELECT] WITH NOCHECK ADD
CONSTRAINT [PK_FORMGENSELECT] PRIMARY KEY  NONCLUSTERED
(
  [objectId]
) WITH  FILLFACTOR = 90  ON [PRIMARY]
GO


CREATE TABLE [dbo].[SECURITY_FILTER] (
[objectId] [T_IDENTIFIER] IDENTITY (1, 1) NOT NULL ,
[form] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[sortOrder] [int] NULL ,
[dbColName] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[SECURITY_FILTER] WITH NOCHECK ADD
CONSTRAINT [PK_SECURITY_FILTER] PRIMARY KEY  NONCLUSTERED
(
  [objectId]
) WITH  FILLFACTOR = 90  ON [PRIMARY]
GO


CREATE TABLE [dbo].[FORMGEN] (
[objectId] [T_IDENTIFIER] IDENTITY (1, 1) NOT NULL ,
[form] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[sortOrder] [int] NULL ,
[dbColName] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FORMGEN] WITH NOCHECK ADD
CONSTRAINT [PK_FORMGEN] PRIMARY KEY  NONCLUSTERED
(
  [objectId]
) WITH  FILLFACTOR = 90  ON [PRIMARY]
GO


Show quote
"S R H" <jy197***@yahoo.com> wrote in message
news:E71ig.1120$Wy.74227@news20.bellglobal.com...
> I have 3 tables which have a "sortOrder" column of int datatype. I have a
> UNION query which is sorting on sortOrder column:
>
> SELECT fgs.objectid, fgs.form, fgs.sortOrder, fgs.dbColName
> FROM formgenselect fgs
> WHERE fgs.form = 'personal'
> UNION
> SELECT sf.objectid, sf.form, sf.sortOrder, sf.dbColName
> FROM security_filter sf
> WHERE sf.form = 'personal'
> ORDER BY sortOrder
>
> This query works ok. Now in the first part of the above i do an outer join
> with the third table:
>
> SELECT fgs.objectid, fgs.form, fgs.sortOrder, fgs.dbColName
> FROM formgenselect fgs LEFT JOIN formgen fg ON (fgs.form = fg.form) and
> (fgs.dbColName = fg.dbColName)
> WHERE fgs.form = 'personal'
> UNION
> SELECT sf.objectid, sf.form, sf.sortOrder, sf.dbColName
> FROM security_filter sf
> WHERE sf.form = 'personal'
> ORDER BY sortOrder
>
> Here query analyzer is giving me following error message:
> Server: Msg 209, Level 16, State 1, Line 1
> Ambiguous column name 'sortOrder'.
>
> Can somebody explain it to why it works in first case but not in the
second
> case. What is the solution?
>
> Thanks
>
>
Author
8 Jun 2006 10:54 PM
Lubdha Khandelwal
What happens if you use column aliases for sortOrder?

SELECT fgs.objectid, fgs.form, fgs.sortOrder AS SO, fgs.dbColName
FROM formgenselect fgs LEFT JOIN formgen fg ON (fgs.form = fg.form)
and
(fgs.dbColName = fg.dbColName)
WHERE fgs.form = 'personal'
UNION
SELECT sf.objectid, sf.form, sf.sortOrder AS SO, sf.dbColName
FROM security_filter sf
WHERE sf.form = 'personal'
ORDER BY SO
Author
8 Jun 2006 11:00 PM
S R H
It worked. Any idea why it was not working before?

Show quote
"Lubdha Khandelwal" <lub***@gmail.com> wrote in message
news:1149807247.391354.214300@y43g2000cwc.googlegroups.com...
> What happens if you use column aliases for sortOrder?
>
>  SELECT fgs.objectid, fgs.form, fgs.sortOrder AS SO, fgs.dbColName
>  FROM formgenselect fgs LEFT JOIN formgen fg ON (fgs.form = fg.form)
> and
>  (fgs.dbColName = fg.dbColName)
>  WHERE fgs.form = 'personal'
>  UNION
>  SELECT sf.objectid, sf.form, sf.sortOrder AS SO, sf.dbColName
>  FROM security_filter sf
>  WHERE sf.form = 'personal'
>  ORDER BY SO
>
Author
8 Jun 2006 11:06 PM
Stu
Because the SQL optimizer performs a UNION before it performs the ORDER
BY.  In the first scenario, you UNION the two sort order columns, so
the parser sees it as one (no confusion).  In the second scenario,
you've included a third table to the right of the original  UNION; this
adds a second possible sortorder column, which confused the optimizer.
To correct, try prefacing the ORDER BY clause with 'fgs' or using a
colum aliad as suggested by the previous poster.

Stu

S R H wrote:
Show quote
> I have 3 tables which have a "sortOrder" column of int datatype. I have a
> UNION query which is sorting on sortOrder column:
>
> SELECT fgs.objectid, fgs.form, fgs.sortOrder, fgs.dbColName
> FROM formgenselect fgs
> WHERE fgs.form = 'personal'
> UNION
> SELECT sf.objectid, sf.form, sf.sortOrder, sf.dbColName
> FROM security_filter sf
> WHERE sf.form = 'personal'
> ORDER BY sortOrder
>
> This query works ok. Now in the first part of the above i do an outer join
> with the third table:
>
> SELECT fgs.objectid, fgs.form, fgs.sortOrder, fgs.dbColName
> FROM formgenselect fgs LEFT JOIN formgen fg ON (fgs.form = fg.form) and
> (fgs.dbColName = fg.dbColName)
> WHERE fgs.form = 'personal'
> UNION
> SELECT sf.objectid, sf.form, sf.sortOrder, sf.dbColName
> FROM security_filter sf
> WHERE sf.form = 'personal'
> ORDER BY sortOrder
>
> Here query analyzer is giving me following error message:
> Server: Msg 209, Level 16, State 1, Line 1
> Ambiguous column name 'sortOrder'.
>
> Can somebody explain it to why it works in first case but not in the second
> case. What is the solution?
>
> Thanks

AddThis Social Bookmark Button