Nick_nsk
Дата: 13.09.2006 12:47:33
Две связанные таблицы. Необходимо вытащить A_id для заданного Name_A независимо от результатов запроса
Написанный Select с Union при наличии признака 'мясо' отдает его в ПЕРВОЙ строке,
количество возвращаемых строк не суть важно.
При отсутствии признака ОБЯЗАТЕЛЬНО возвращает A_id для для заданного Name_A
Можно оптимизировать запрос?
USE [tempdb]
GO
/****** Object: Table [dbo].[Animals] Script Date: 09/13/2006 15:12:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Animals](
[A_Id] [int] NOT NULL,
[Name_A] [char](15) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Pitanie] Script Date: 09/13/2006 15:13:36 ******/
CREATE TABLE [dbo].[Pitanie](
[Id] [int] NOT NULL,
[P_name] [char](15) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT INTO animals (a_id,Name_A) VALUES (1,'кошка')
INSERT INTO animals (a_id,Name_A) VALUES (2,'корова')
INSERT INTO animals (a_id,Name_A) VALUES (3,'собака')
INSERT INTO animals (a_id,Name_A) VALUES (4,'курица')
INSERT INTO animals (a_id,Name_A) VALUES (5,'лев')
INSERT INTO Pitanie (id,P_name) VALUES (1,'мясо')
INSERT INTO Pitanie (id,P_name) VALUES (1,'молоко')
INSERT INTO Pitanie (id,P_name) VALUES (2,'сено')
INSERT INTO Pitanie (id,P_name) VALUES (3,'хлеб')
INSERT INTO Pitanie (id,P_name) VALUES (3,'мясо')
INSERT INTO Pitanie (id,P_name) VALUES (3,'кости')
INSERT INTO Pitanie (id,P_name) VALUES (4,'пшено')
/* Типичный селект: */
SELECT a_id,name_a,p_name FROM animals
LEFT JOIN pitanie ON a_id=id
DECLARE @Anml char(15),@Prdkt char(15)
select @Anml='кошка',@Prdkt='мясо'
/*select @Anml='кошка',@Prdkt='червяки'*/
/*select @Anml='лев',@Prdkt='мясо'*/
select a_id,name_a,p_name,1 as ord from animals,pitanie where a_id=id and name_a=@Anml and p_name=@Prdkt
UNION select a_id,' ',' ',2 as ord from animals where name_a=@Anml order by ord
go
Nick_nsk
Дата: 13.09.2006 13:17:17
Извиняюсь. При вставке ушли пробелы. Работающий запрос:
select a_id,name_a,p_name,1 as ord from animals,pitanie where a_id=id and name_a=@Anml and p_name=@Prdkt
UNION select a_id,' ',' ',2 as ord from animals where name_a=@Anml order by ord
Nick_nsk
Дата: 13.09.2006 13:33:05
Спасибо, работает!
Я сам крапал:
select a_id,name_a,p_name from Animals
left join Pitanie on a_id=id
where name_A='лев' and P_name='мясо'
Но результат был не тот...