Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
Есть две таблицы Т1 и Т2

одинаоковй струтктуры:
товар, категория


необходимо объеденить две таблицы по принципу

к Т1 добавить строки талицы Т2 в случае если Т2.Товар отсутствует в таблице Т1.Товар

MS SQL 2005
19 авг 09, 11:49    [7555416]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
glyzin
к Т1 добавить строки талицы Т2
select * from Т1
union all
select * from Т2...
glyzin
если Т2.Товар отсутствует в таблице Т1.Товар
...where Т2.Товар not in (select Товар from Т1)
19 авг 09, 11:52    [7555440]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
маленькая поправочка
Паганель
glyzin
к Т1 добавить строки талицы Т2
select * from Т1
union all
select * from Т2...
glyzin
если Т2.Товар отсутствует в таблице Т1.Товар
...where Т2.Товар not in (select Т1.Товар from Т1)
для надежности
19 авг 09, 11:54    [7555454]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
я правильно понял что для трех таблиц будет выгледить так?

select * from Т1
union all
select * from Т2...
where Т2.Товар not in (select Т1.Товар from Т1)
union all
select * from Т3
where Т3.Товар not in (select Т1.Товар from Т1) and (Т3.Товар not in (select Т2.Товар from Т2))
19 авг 09, 11:59    [7555502]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
glyzin
я правильно понял что для трех таблиц будет выгледить так?
Это зависит от того, как выглядит задача на русском языке
Для трех таблиц Вы ее пока не описали
19 авг 09, 12:00    [7555508]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
вообще задача такая, может я не правильно сформулировал, хотел сам наваять скрипт но думаю не справлюсь


вообщем есть таблица1

Товар Категория

Товар1 Категория1
Товар2 Категория1
Товар2 Категория2
Товар3 Категория1
Товар4 Категория2
Товар4 Категория3
Товар5 Категория1
Товар5 Категория3
Товар6 Категория4


Нужно вывести из таблицы1 товар которой принадлжит категории1, + к этому
товар который принадлжеит категории2 но при этом не принадлежит категории1, +
к этому товар котороый принадлжеит категории3 но при этом не принадлежит категории1 и категории2, остальные товары котороые не принадлежать ни одной из категорий 1 2 3 можно не выводить.

т..е результат будет

Товар1 Категория1
Товар2 Категория1
Товар3 категория1
Товар4 категория2
Товар5 Категория1

поясню Товар5 имеет две категории 1 и 3 , но поскольку он принадлежит категории1, то стави категорию1 а не 3

например товар4 принадлжеит категории 2 и 3=> его нет в категории1 значит ставим категорию2


Категрия1 и Категория2 и Категория3 известны заранее
19 авг 09, 12:13    [7555586]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
понятно изложил?
19 авг 09, 12:13    [7555592]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
select tovar, min(kategoriya) kategoriya from mytable group by tovar

для спящего время бодрствования равносильно сну
19 авг 09, 12:14    [7555595]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
хотел создать таблицы в каждой из которой будет только категория 1 , 2 и 3

потом их соеденить по принципу Union all where...
19 авг 09, 12:14    [7555597]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
min(kategoriya) для числа а у меня строка же
19 авг 09, 12:16    [7555604]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
glyzin
min(kategoriya) для числа а у меня строка же

А строки разве нельзя сравнивать на больше/меньше ?
19 авг 09, 12:17    [7555609]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
а приоритет как я сделаю , ведь сравнение не даёт этого.
19 авг 09, 12:18    [7555616]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Anddros
Member

Откуда:
Сообщений: 1077
glyzin
min(kategoriya) для числа а у меня строка же


min(case kategoriya when 'kategoriya1' then 1 when 'kategoriya2' then 2 when ... end)
19 авг 09, 12:19    [7555618]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
и где фигурирует в запросе категория1 и категория2 и категория3?
19 авг 09, 12:20    [7555623]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
щас попробую
19 авг 09, 12:21    [7555629]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
я так предполагаю есть еще одна таблица, в которой хранится информация по товару (какой товар вообще есть), не категория.
select tovar, coalesce(t1.znach, t2.znach, t3.znach) kategoriya
 from tovartable tt
  left join t1 on tt.tovar = t1.tovar and t1.kat = 1
  left join t2 on tt.tovar = t2.tovar and t1.kat = 2
  left join t3 on tt.tovar = t3.tovar and t1.kat = 3
 where coalesce(t1.znach, t2.znach, t3.znach) is not null

для спящего время бодрствования равносильно сну
19 авг 09, 12:23    [7555632]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Автор, Вы сами попробовали сделать то, что Вам предложили?
declare @таблица1 table (Товар varchar(20), Категория varchar(20))
insert into @таблица1 (Товар, Категория)
select 'Товар1', 'Категория1' union all
select 'Товар2', 'Категория1' union all
select 'Товар2', 'Категория2' union all
select 'Товар3', 'Категория1' union all
select 'Товар4', 'Категория2' union all
select 'Товар4', 'Категория3' union all
select 'Товар5', 'Категория1' union all
select 'Товар5', 'Категория3' union all
select 'Товар6', 'Категория4'

select Товар, min(Категория) Категория
  from @таблица1 
 group by Товар

Товар                Категория
-------------------- --------------------
Товар1               Категория1
Товар2               Категория1
Товар3               Категория1
Товар4               Категория2
Товар5               Категория1
Товар6               Категория4

(6 row(s) affected)
Результат устраивает?
19 авг 09, 12:23    [7555635]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Версию сервера не скажете?
19 авг 09, 13:13    [7555996]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
вроде получилось, спасибо всем.
19 авг 09, 16:43    [7557719]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
Паганель
Автор, Вы сами попробовали сделать то, что Вам предложили?
declare @таблица1 table (Товар varchar(20), Категория varchar(20))
insert into @таблица1 (Товар, Категория)
select 'Товар1', 'Категория1' union all
select 'Товар2', 'Категория1' union all
select 'Товар2', 'Категория2' union all
select 'Товар3', 'Категория1' union all
select 'Товар4', 'Категория2' union all
select 'Товар4', 'Категория3' union all
select 'Товар5', 'Категория1' union all
select 'Товар5', 'Категория3' union all
select 'Товар6', 'Категория4'

select Товар, min(Категория) Категория
  from @таблица1 
 group by Товар

Товар                Категория
-------------------- --------------------
Товар1               Категория1
Товар2               Категория1
Товар3               Категория1
Товар4               Категория2
Товар5               Категория1
Товар6               Категория4

(6 row(s) affected)
Результат устраивает?


это частный случай вы и в самом деле думаете что есть категория1 категория2, они конечно есть категории только называються подругому например:
*AX
BOSH
СпецТехника
19 авг 09, 16:45    [7557730]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
только вот если делать через min (case....
то результат ни тот маленько там вместо категорий цифры, а надо сами категории.
19 авг 09, 16:47    [7557739]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
declare @таблица1 table (Товар varchar(20), Категория varchar(20))
insert into @таблица1 (Товар, Категория)
select 'Товар1', '*AX' union all
select 'Товар2', '*AX' union all
select 'Товар2', 'BOSH' union all
select 'Товар3', '*AX' union all
select 'Товар4', 'BOSH' union all
select 'Товар4', 'СпецТехника' union all
select 'Товар5', '*AX' union all
select 'Товар5', 'СпецТехника' union all
select 'Товар6', 'СпецТехника_2'

select Товар, min(Категория) Категория
  from @таблица1 
 group by Товар

Товар                Категория
-------------------- --------------------
Товар1               *AX
Товар2               *AX
Товар3               *AX
Товар4               BOSH
Товар5               *AX
Товар6               СпецТехника_2

(6 row(s) affected)
Результат правильный?
А если нет, то почему?
19 авг 09, 16:49    [7557759]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
glyzin
только вот если делать через min (case....
то результат ни тот маленько там вместо категорий цифры, а надо сами категории.

А обратный case потом что мешает сделать ?
19 авг 09, 16:49    [7557761]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
Алексей2003
я так предполагаю есть еще одна таблица, в которой хранится информация по товару (какой товар вообще есть), не категория.
select tovar, coalesce(t1.znach, t2.znach, t3.znach) kategoriya
 from tovartable tt
  left join t1 on tt.tovar = t1.tovar and t1.kat = 1
  left join t2 on tt.tovar = t2.tovar and t1.kat = 2
  left join t3 on tt.tovar = t3.tovar and t1.kat = 3
 where coalesce(t1.znach, t2.znach, t3.znach) is not null

для спящего время бодрствования равносильно сну


да есть на самом деле ни одна таблица а две
таблица товаров и таблица категорий которая связан с таблицой товаров по ID

т.е. например

таблица товаров
ID Название товара
1 Товар1
....
2 Товар2
3 Товар3

таблица категорий
ID Название категории
1 Категория1
1 Категория2
...
3 Категория2
3 Категория3
19 авг 09, 16:50    [7557772]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заспросом объеденить таблицы  [new]
glyzin
Member

Откуда:
Сообщений: 258
Паганель
declare @таблица1 table (Товар varchar(20), Категория varchar(20))
insert into @таблица1 (Товар, Категория)
select 'Товар1', '*AX' union all
select 'Товар2', '*AX' union all
select 'Товар2', 'BOSH' union all
select 'Товар3', '*AX' union all
select 'Товар4', 'BOSH' union all
select 'Товар4', 'СпецТехника' union all
select 'Товар5', '*AX' union all
select 'Товар5', 'СпецТехника' union all
select 'Товар6', 'СпецТехника_2'

select Товар, min(Категория) Категория
  from @таблица1 
 group by Товар

Товар                Категория
-------------------- --------------------
Товар1               *AX
Товар2               *AX
Товар3               *AX
Товар4               BOSH
Товар5               *AX
Товар6               СпецТехника_2

(6 row(s) affected)
Результат правильный?
А если нет, то почему?


опять же минимум здесь не пройдет , в нем нет приоритета по категориям

кто сказал что *AX дожна быть а не BOSH для товара2? может наооборот?
19 авг 09, 16:52    [7557790]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить