Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 найти значение в поле  [new]
Александр Го
Member

Откуда:
Сообщений: 8
У меня есть таблица

Группа Название
Яблоки Дженатан желтый
Яблоки Мекинтош зеленый
Яблоки Казачка кубанская зеленый
Яблоки Семиренко красный
Груши Китайская
Груши Тайваньская
Груши Итальянская

И есть таблица

Группа Доп поле
Яблоки %зел%
Апельсины %бор%
Мандарины %спел%

мне нужно привязать к 1-й таблице вторую и отметить те позиции, которые содержат в названии элемент, отраженный во второй таблице в поле "доп поле". Т.е. для Яблок это будет Мекинтош зеленый, Казачка кубанская зеленый, все остальные не отметятся, т.к. или не содержат в названии зел или этих групп нет в первой таблице (вяжемся от левой к правой через left)
работаю в MS SQL server 2005
знаю, что есть INSTR, но не пойму как ей пользоваться и подойдет мне или нет
какой наиболее рациональный способ, т.к. руками не вариант прописать разово - таблицы огромные и код будет постоянно гоняться и критерии могут менять в доп поле со временем
21 май 13, 17:43    [14328879]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Glory
Member

Откуда:
Сообщений: 104760
Александр Го
знаю, что есть INSTR, но не пойму как ей пользоваться и подойдет мне или нет

Что-что есть ?
Может простым select-ом лучше ?
21 май 13, 17:47    [14328897]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Александр Го
Member

Откуда:
Сообщений: 8
а как select, если все время разные значения, в доп поле, для каждой группы свое
22 май 13, 09:06    [14330554]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Glory
Member

Откуда:
Сообщений: 104760
Александр Го
а как select, если все время разные значения, в доп поле, для каждой группы свое

Обычно несколько таблиц в одном запросе соединяют с помощью фразы join.
22 май 13, 09:15    [14330611]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
baracs
Member

Откуда: Москва
Сообщений: 7206
Александр Го

В "Доп поле" у вас готовый шаблон для оператора LIKE.
22 май 13, 09:18    [14330631]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Александр Го,

select f.FruitName
from groups g
   join fruits f on f.GroupName=g.GroupName and f.FruitName like g.dop
22 май 13, 09:21    [14330651]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
kain111
Member

Откуда:
Сообщений: 227
как то вы пространственно изъясняетесь.
я думаю вам необходима конструкция вида
автор
update table1
set status=pr from table1
left join table2 on table1.grup=table2.grup
where table1.name like table2.dop_pole

но будет лучше если вы приведете структуру таблиц.
22 май 13, 09:23    [14330662]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
baracs
Member

Откуда: Москва
Сообщений: 7206
Ruuu
Александр Го,

select f.FruitName
from groups g
   join fruits f on f.GroupName=g.GroupName and f.FruitName like g.dop
Ему надо не выбрать, а
Александр Го
отметить те позиции, которые содержат в названии элемент, отраженный во второй таблице в поле "доп поле".
22 май 13, 09:29    [14330686]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
kain111
как то вы пространственно изъясняетесь.
я думаю вам необходима конструкция вида
автор
update table1
set status=pr from table1
left join table2 on table1.grup=table2.grup
where table1.name like table2.dop_pole

но будет лучше если вы приведете структуру таблиц.
А зачем там LEFT?
А что будет, если для одной и той же группы в table2 будет несколько записей?
22 май 13, 09:45    [14330763]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Александр Го
Member

Откуда:
Сообщений: 8
да, нужно именно ответить, если во второй таблице для группы два значения нужно, то их можно организовать 2-мя способами и через запятую и еще одной строкой. как более удобно для обработки в данном случае? пока не было такого, но в теории может появиться
22 май 13, 10:24    [14330984]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Александр Го
как более удобно для обработки в данном случае?

Какую именно обработку вы имеете в виду?
22 май 13, 10:34    [14331022]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Александр Го
Member

Откуда:
Сообщений: 8
Гость333, в принципе работу с тем, что написал, пока не понятно даже что делать если одна запись под группу
а обработку имею ввиду - с чем проще будет работать с задвоенной строкой или значениями через запятую
типа
Группа Доп поле
Яблоки %зел%,%жел%

или

Группа Доп поле
Яблоки %зел%
Яблоки %жел%

ну так как не понятно с одной записью, то пока неактуально
22 май 13, 11:27    [14331406]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Александр Го
а обработку имею ввиду - с чем проще будет работать с задвоенной строкой или значениями через запятую
типа
Группа Доп поле
Яблоки %зел%,%жел%

или

Группа Доп поле
Яблоки %зел%
Яблоки %жел%

Программисту проще работать с "задвоенной строкой", т.к. этот вариант удовлетворяет требованиям первой нормальной формы. Вариант "значения через запятую" при обработке, обычно, надо сперва нормализовать.

Пользователю часто может быть удобнее вариант "значения через запятую". При этом совсем не факт, что в таком виде и нужно хранить данные в БД.
22 май 13, 11:35    [14331465]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
select 
  f.FruitName , 
  chek = 
     case
        when  f.FruitName like g.dop
         then 1
         else 0
     end
from  fruits f  
   inner join groups g on f.GroupName=g.GroupName 

?
22 май 13, 11:38    [14331493]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
Maxx
select 
  f.FruitName , 
  chek = 
     case
        when  f.FruitName like g.dop
         then 1
         else 0
     end
from  fruits f  
   inner join groups g on f.GroupName=g.GroupName 


?
SELECT f.FruitName, chek=
 ISNULL
 (
  (
   SELECT TOP(1) 1
   FROM groups g
   WHERE g.GroupName=f.GroupName AND f.FruitName LIKE g.dop
  ),0
 )
FROM fruits f;
22 май 13, 13:46    [14332733]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap,

as you wish :)
22 май 13, 14:25    [14333105]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
Maxx
iap,

as you wish :)
просто слегка модифицировал Ваше решение.
Ведь оно может размножить записи fruits, если будет несколько подходящих шаблонов из-за JOIN
22 май 13, 14:33    [14333171]     Ответить | Цитировать Сообщить модератору
 Re: найти значение в поле  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap,
все может быть ,беспорно (тем более я и не думал что-то там оспаривать).
Тем более,что там у ТС - знает только он ,по факту
22 май 13, 14:35    [14333189]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить