Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Александр Го Member Откуда: Сообщений: 8 |
У меня есть таблица Группа Название Яблоки Дженатан желтый Яблоки Мекинтош зеленый Яблоки Казачка кубанская зеленый Яблоки Семиренко красный Груши Китайская Груши Тайваньская Груши Итальянская И есть таблица Группа Доп поле Яблоки %зел% Апельсины %бор% Мандарины %спел% мне нужно привязать к 1-й таблице вторую и отметить те позиции, которые содержат в названии элемент, отраженный во второй таблице в поле "доп поле". Т.е. для Яблок это будет Мекинтош зеленый, Казачка кубанская зеленый, все остальные не отметятся, т.к. или не содержат в названии зел или этих групп нет в первой таблице (вяжемся от левой к правой через left) работаю в MS SQL server 2005 знаю, что есть INSTR, но не пойму как ей пользоваться и подойдет мне или нет какой наиболее рациональный способ, т.к. руками не вариант прописать разово - таблицы огромные и код будет постоянно гоняться и критерии могут менять в доп поле со временем |
21 май 13, 17:43 [14328879] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Что-что есть ? Может простым select-ом лучше ? |
||
21 май 13, 17:47 [14328897] Ответить | Цитировать Сообщить модератору |
Александр Го Member Откуда: Сообщений: 8 |
а как select, если все время разные значения, в доп поле, для каждой группы свое |
22 май 13, 09:06 [14330554] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Обычно несколько таблиц в одном запросе соединяют с помощью фразы join. |
||
22 май 13, 09:15 [14330611] Ответить | Цитировать Сообщить модератору |
baracs Member Откуда: Москва Сообщений: 7206 |
Александр Го В "Доп поле" у вас готовый шаблон для оператора LIKE. |
22 май 13, 09:18 [14330631] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
kain111 Member Откуда: Сообщений: 227 |
как то вы пространственно изъясняетесь. я думаю вам необходима конструкция вида
но будет лучше если вы приведете структуру таблиц. |
||
22 май 13, 09:23 [14330662] Ответить | Цитировать Сообщить модератору |
baracs Member Откуда: Москва Сообщений: 7206 |
|
||||
22 май 13, 09:29 [14330686] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
А что будет, если для одной и той же группы в table2 будет несколько записей? |
||||
22 май 13, 09:45 [14330763] Ответить | Цитировать Сообщить модератору |
Александр Го Member Откуда: Сообщений: 8 |
да, нужно именно ответить, если во второй таблице для группы два значения нужно, то их можно организовать 2-мя способами и через запятую и еще одной строкой. как более удобно для обработки в данном случае? пока не было такого, но в теории может появиться |
22 май 13, 10:24 [14330984] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Какую именно обработку вы имеете в виду? |
||
22 май 13, 10:34 [14331022] Ответить | Цитировать Сообщить модератору |
Александр Го Member Откуда: Сообщений: 8 |
Гость333, в принципе работу с тем, что написал, пока не понятно даже что делать если одна запись под группу а обработку имею ввиду - с чем проще будет работать с задвоенной строкой или значениями через запятую типа Группа Доп поле Яблоки %зел%,%жел% или Группа Доп поле Яблоки %зел% Яблоки %жел% ну так как не понятно с одной записью, то пока неактуально |
22 май 13, 11:27 [14331406] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Программисту проще работать с "задвоенной строкой", т.к. этот вариант удовлетворяет требованиям первой нормальной формы. Вариант "значения через запятую" при обработке, обычно, надо сперва нормализовать. Пользователю часто может быть удобнее вариант "значения через запятую". При этом совсем не факт, что в таком виде и нужно хранить данные в БД. |
||
22 май 13, 11:35 [14331465] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
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] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
iap, as you wish :) |
22 май 13, 14:25 [14333105] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Ведь оно может размножить записи fruits, если будет несколько подходящих шаблонов из-за JOIN |
||
22 май 13, 14:33 [14333171] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
iap, все может быть ,беспорно (тем более я и не думал что-то там оспаривать). Тем более,что там у ТС - знает только он ,по факту |
22 май 13, 14:35 [14333189] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |