powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Pomogite
11 сообщений из 11, страница 1 из 1
Pomogite
    #32016973
sardinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Y menya est' 2 table. V odnom 100 record v drygom 89. Prichem v oboih table est 2 fields kotorue Primary Key. Pomogite napisat query kotoraya bydet pokasuvet eti 11 row.
...
Рейтинг: 0 / 0
Pomogite
    #32016975
Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно сделать так :
select * from table_2
where key_1 not in (select key_1 from table_1) and key_2 not in (select key_2 from table_1)
...
Рейтинг: 0 / 0
Pomogite
    #32016979
sardinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kak nyshno sdelat esli y menya eti 2 fields(combinaziya costavlyet primary key) ?
...
Рейтинг: 0 / 0
Pomogite
    #32016993
BiSas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно можно сделать так :

select *
from table_2
where convert(char(<Сколько позиций зависит от типа вашего key_1&gt, key_1)+
convert(char(<Сколько позиций зависит от типа вашего key_2&gt, key_2)
not in (select convert(char(<Сколько позиций зависит от типа вашего key_1&gt, key_1)+
convert(char(<Сколько позиций зависит от типа вашего key_2&gt, key_2)
from table_1)

Если ключевые поля типа Char, то преобразования перед сложением делать не надо.
Не очень оптимально, но надежно.
...
Рейтинг: 0 / 0
Pomogite
    #32016994
BiSas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь, не учел преобразования в смайлики.
**********************************************
Примерно можно сделать так :

select *
from table_2
where convert(char(<Сколько позиций зависит от типа вашего key_1> ) , key_1)+
convert(char(<Сколько позиций зависит от типа вашего key_2> ) , key_2)
not in (select convert(char(<Сколько позиций зависит от типа вашего key_1> ) , key_1)+
convert(char(<Сколько позиций зависит от типа вашего key_2> ) , key_2)
from table_1)

Если ключевые поля типа Char, то преобразования перед сложением делать не надо.
Не очень оптимально, но надежно.
...
Рейтинг: 0 / 0
Pomogite
    #32016998
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше делать так(если я правильно понял задачу):
select * from table_100 t100
where not exists(select * from table_89 t89 where t100.key1=t89.key1 and t100.key2=t89.key2)
...
Рейтинг: 0 / 0
Pomogite
    #32017011
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так:
select t100.* from table_100 t100
LEFT JOIN table_89 t89 ON t100.key1=t89.key1 and t100.key2=t89.key2
WHERE t89.key1 IS NULL
...
Рейтинг: 0 / 0
Pomogite
    #32017018
BiSas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Смирнов, по моему вы не правы.
В вашем запросе условие
WHERE t89.key1 IS NULL
просто напросто игнорируется.
Так всегда происходит для Left Join если по таблице справа записи отсутствуют, а их отсутствие пытаются проверить выражением is null
...
Рейтинг: 0 / 0
Pomogite
    #32017056
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый BiSas. Напишите подробнее, в чём моя неправота: синтаксис, логика или что-то ещё. Очень хотелось бы узнать Ваше мнение и подробный разбор моей ошибки, желательно с примером.
...
Рейтинг: 0 / 0
Pomogite
    #32017108
BiSas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Смирнов, прошу у вас прощения. Вы правы.
Такое поведение как описал я, наблюдается в выражении типа

select * from Table1 t1, Table2 t2
where (t1.key1 *= t2.key2) and (t2.key2 is null)

А Microsoft сам не рекомендует использовать такую конструкцию. И оставленна она только для совместимости.
...
Рейтинг: 0 / 0
Pomogite
    #32017132
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BiSas. Извинения приняты.
По выражениям с использованием LEFT (RIGHT) JOIN или *=.
Тут Вы совершенно правы - действительно, конструкция *= не рекомендуется.
Она нестандартная и оставлена для совместимости.
А LEFT (RIGHT) JOIN стандартная и её действие однозначно и предсказуемо, к тому же такое объединение иногда весьма полезно. Вот как в этом вопросе по выборке несвязанных (т.е. отсутствующих во второй таблице) записей. Первое, что приходит в голову - SELECT .. WHERE NOT EXISTS (SELECT .. ) или ..WHERE .. NOT IN (SELECT .. ) .
И это правильно, универсальный подход, работает железно.
Но, по моему мнению, для оптимизации запроса лучше использовать JOIN (конечно если это возможно). К тому же при этом, если сервер плохо сообразит, что с чем связывать, ему можно дополнительно указать, например LEFT HASH JOIN.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Pomogite
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]