Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Выбор строк не имеющих аналогов в другой таблице Добавлено: 18.02.03 17:19  

Автор вопроса:  MAGNUS

Всем привет!

Сегодня у меня вопрос...

Как лучше реализовать сабж? Из одного тейбла выбрать все чего нет во втором, можно с левым джойном, можно с NOT IN , NOT EXISTS, но не нравятся они мне... Где то, когда то я видел способ более элегантный, может даже один оператор, который делает именно это. Кто знает такой способ подкиньте плиз. Но тут еще важна скорость т.к. в обоих тейблах может быть до милиона записей, потому и отказался от джойна, он слишком медленный

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Агент Смит



ICQ: 147404128 

Вопросов: 12
Ответов: 128
 Web-сайт: www.bbsoftware.ru
 Профиль | | #1
Добавлено: 18.02.03 17:31

попробуй так:  

select * from yourtable like SearchText

где вместо yourtable - имя твоё таблицы, а вместо SearchText - то чему то, что ты ищишь...

 

Ответить

Номер ответа: 2
Автор ответа:
 Агент Смит



ICQ: 147404128 

Вопросов: 12
Ответов: 128
 Web-сайт: www.bbsoftware.ru
 Профиль | | #2
Добавлено: 18.02.03 17:34

P.S. - соответсвенно перед этим выбираешь из первой таблицы искомый текст... другими словами сравниваешь таблицы...

Ответить

Номер ответа: 3
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #3 Добавлено: 18.02.03 19:19

Мда... Наверное  я не так выразился, простой запрос ,мне ни к чему ,  а тем более сравнивать таблицы руками из VB если есть такая штука как SQL.

 Я ж говорю пробовал такие вот варианты:

1.

Select * from Table1

where ID not in(select * from  table2)

2.Select * from Table1

where not Exists(select * from  table2)

3.Select * from Left Outer Join Table2 on Table1.ID=Table2.ID

where Table1.ID is Null

Все это работает, но джойн слишком медленный, НОТ ИН, вполне подходит , но как я ранее сказал , где то видесл метод специально для этой ситуации, сам я его естественно не ппомню, потому и спросил. В некоторых базах для этой цели используется Except,  но в MSSQL у него ИМХО другое назначение...

Ответить

Номер ответа: 4
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #4 Добавлено: 18.02.03 20:14

3-й вариант по моему самый правильный и быстрый и лучше сделать нельзя!

IMHO, конечно.

Ответить

Номер ответа: 5
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #5 Добавлено: 18.02.03 22:57

Я ж говорю, 3-й то как раз с JOIN самый медленный, на 100К строк у него уходит Минута, а NOT INделает все за 5 сек... Вероятно его и буду использовать.

Спасибоза внимание

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам