Click here to Skip to main content
15,899,549 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi guys,
I have two table:

SQL
create table Employees
(
   EmployeeID int Primary key identity(1,1) not null,
   EmployeeName varchar(50)
)

SQL
create table Orders
(
  OrderID int Primary key identity(1,1) not null,
  OrderName varchar(40),
  EmployeeID int constraint FK_Orders_Employees_EmployeeID foreign key (EmployeeID) references Employees(EmployeeID) not null
)

i want to execute this SQL Statement:
SQL
select Employees.EmployeeID,Employees.EmployeeName,
(select Orders.OrderID,Orders.OrderName from Orders where Orders.EmployeeID=Employees.EmployeeID)
from Employees
where Employees.EmployeeID between 1 and 40

But it give me error that:
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

Then what can i do please.
Posted
Updated 17-May-11 23:46pm
v2

Why not just use inner join, sub-query provides no benefit in this case...

SQL
select E.EmployeeID, E.EmployeeName, O.OrderID, O.OrderName 
from Employees E
inner join Orders O On E.EmployeeID = O.EmployeeID
where E.EmployeeID between 1 and 40
 
Share this answer
 
Comments
MrLonely_2 18-May-11 4:49am    
Thanks
You need to tweak a little. You could achieve it with several different method.

(1) Use VIEW
- Create a view(vw_view) of Employee and Order table like below.

SQL
SELECT     dbo.Employees.EmployeeName, dbo.Employees.EmployeeID, dbo.Orders.OrderID, dbo.Orders.OrderName
FROM         dbo.Employees INNER JOIN
                      dbo.Orders ON dbo.Employees.EmployeeID = dbo.Orders.EmployeeID


and then query like this

SQL
SELECT
v.EmployeeID,v.EmployeeName,v.OrderID,v.OrderName
FROM
vw_emp v
WHERE
v.EmployeeID BETWEEN 1 AND 40


(2) Use SubQuery
- Same above query can be used as subquery. I would recommended to use VIEW over subquery for readability and also it would help in future if some conditions will change or some table alternation will be needed.

SQL
SELECT     dbo.Employees.EmployeeName, dbo.Employees.EmployeeID, dbo.Orders.OrderID, dbo.Orders.OrderName
FROM         dbo.Employees INNER JOIN
                      dbo.Orders ON dbo.Employees.EmployeeID = dbo.Orders.EmployeeID
WHERE Employees.EmployeeID between 1 and 40


(3) Get two separate result (NOT recommended)

SQL
select Employees.EmployeeID,Employees.EmployeeName
from Employees
where Employees.EmployeeID between 1 and 40


and

SQL
select Orders.OrderID,Orders.OrderName,Orders.EmployeeID from Orders,Employees

 where Orders.EmployeeID=Employees.EmployeeID

and Employees.EmployeeID between 1 and 40


You can apply filter at your business logic(in C#, VB or any other programming language you are using).

Hope it helps.
 
Share this answer
 
v2
Comments
MrLonely_2 18-May-11 5:22am    
Thank you very much
That's Aragon 18-May-11 6:37am    
Glad to know that it helps you. :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900