Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объединение в базу по не полному совпадению, <таб1.поле> like <таб2.поле>% 
:(
    Опции темы
Roksalana
Дата 30.5.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.5.2006

Репутация: нет
Всего: нет



Доброго времени суток. Ни как не могу придумать правильный запрос. Увидела Ваш форум и решила спросить. 
Суть проблемы: есть две таб (БД MySQL, на всякий случай smile ). Во второй таблице содержатся коды, а в первой поле, значение которого = код из таб2 и любое число. 
Т.е первая:
1234335434 
1653233454
5466377835
(числа - рандомайз по клавеsmile не критично)
Вторая:
123
756
346
и т.п
Нужно посчитать сколько записей в таб1 начинается с кодов таб2. 
Конечно можно выбрать отдельно каждый код из таб2 и искать уже его в таб1 (нечто вроде select * from таб1 where поле like '<заранее выбранный код из таб2>%' ), но хотелось бы единым запросом  smile 
Пробовала так:
SELECT count(*) FROM таб1 , таб2
WHERE таб1.поле LIKE  таб2.поле || '%'  group by таб2.поле, но ИМХО, полная чушь. Очень надеюсь, что мне тут помогут  smile  Заранее всем спасибо. 
PM MAIL WWW   Вверх
batigoal
Дата 30.5.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Во второй таблице длина чисел фиксирована?

Если да, тогда будет что-то типа
Код

select count(*) from table_1 where substr(value,1,3) in (select * from table_2)
 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
skyboy
Дата 30.5.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



длина записей во второй таблице одна и та же(3 символа) или варьируется в пределах таблицы? 
PM MAIL   Вверх
Akina
Дата 30.5.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Если количество разрядов во второй таблице не фиксировано, при объединении получится соотношение многие-ко-многим, что даст декартово произведение и дублирование строк в выходном запросе.

А так - что-то вроде
Код
Select count(*) As C
from
(
Select substr(value,1,3) As X
From Table1
) As T1
Inner join 
(
Table2 As T2
)
On T1.X=T2.Code
 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Roksalana
Дата 30.5.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.5.2006

Репутация: нет
Всего: нет



2 skyboy -> Нет, длинна варьируется smile
2 Akina -> мускул, что стоит у нас, не поддерживает вложенные запросы smile
Проблема еще в том, что совпадать должен код наибольшей длинны, т.е если есть 1234 и 12 в таб2, то посчитать запись из таб1 12345678 нужно, как запись относяшуюуся к 1234, а не к 12.
ЗЫ: пошла рыть регулярные выражения, вот только объединение тут меня смущает... 
PM MAIL WWW   Вверх
Akina
Дата 30.5.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Roksalana @  30.5.2006,  15:40 Найти цитируемый пост)
Проблема еще в том, что совпадать должен код наибольшей длинны, т.е если есть 1234 и 12 в таб2, то посчитать запись из таб1 12345678 нужно, как запись относяшуюуся к 1234, а не к 12.

О! так это именно то о чем я говорил...

Цитата(Roksalana @  30.5.2006,  15:40 Найти цитируемый пост)
мускул, что стоит у нас, не поддерживает вложенные запросы 

Пора апгрыжить, значит...

Цитата(Roksalana @  30.5.2006,  15:40 Найти цитируемый пост)
если есть 1234 и 12 в таб2, то посчитать запись из таб1 12345678 нужно, как запись относяшуюуся к 1234, а не к 12.
не понял... кто говорил что
Цитата(Roksalana @  30.5.2006,  14:47 Найти цитируемый пост)
Нужно посчитать сколько записей в таб1 начинается с кодов таб2.
?  да и твой селект в первом посте тоже пытается считать кучей... а теперь оказывается что считать надо по каждой записи из таблицы 2 отдельно, да еще без дублей...

 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Roksalana
Дата 30.5.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.5.2006

Репутация: нет
Всего: нет



Цитата(Akina @ 30.5.2006,  15:50)
?  да и твой селект в первом посте тоже пытается считать кучей... а теперь оказывается что считать надо по каждой записи из таблицы 2 отдельно, да еще без дублей...

именно по тому мой селект в первом посту и не работает  smile  результат должен быть нечто вроде этого
поле таб2 | кол-во записей в таб 1, оносящихся к полю таб2
123           |  78
12345       |  13
и т.п. 
PM MAIL WWW   Вверх
Akina
Дата 30.5.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Roksalana @  30.5.2006,  15:40 Найти цитируемый пост)
мускул, что стоит у нас, не поддерживает вложенные запросы 

А Temporary Table он поддерживает? 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.