[SQL] Туплю с запросом
from table_2 t2
where
t2.id not in (
select t1.id
from table_1 t1 )
хотя... тогда в результат запроса не попадает содержимое второго селекта а должно попадать
Как в результат одного селекта запихнуть результат другого с замещением строки при совпадении ID
select
t2.id,
nvl (
(select t1.field from table_1 t1 where t1.id = t2.id
t2.field
)
from table_2 t2
ps: Что-то мне кажется ты задачу не тем путем решаешь.
EXCEPT
SELECT * FROM TableB
(MS SQL 2005)
select t2.id, t2.field_1, t2.field_2
from table_2 t2
where
t2.id not in (
select t1.id
from table_1 t1 )
union all
select t1.id, t1.field_1, t1.field_2
from table_1 t1
from a right join b on a.id = b.id
where a.id is mull
пашол разбираться...
Возможно не тем способом, но сложно выбрать способ, когда ниодного не знаешь...
Задачка: Есть две таблицы, с двумя общими колонками ID и Content. Надо в зависимости от флага, который содержится в одной из этих таблиц, брать Content для ID из первой или второй таблицы.
mullups
wtf?
наверно null
Или это несколько разных задач?
b требует доказать, что a не осёл
Что-то ты совсем запутал что надо получить.тут вообще все сложно, я сам запутался, сейчас разгребаю
Или это несколько разных задач?
поможем разгрести
select t2.id, t2.field_1, t2.field_2но не нравится, что по сути один и тотже селект выполняется дважды.
from table_2 t2
where
t2.id not in (
select t1.id
from table_1 t1 )
union all
select t1.id, t1.field_1, t1.field_2
from table_1 t1
Если b.id не уникально, то будет ( | )
А сколько данных в таблицах? Как долго работает запрос?
Субд какой? В Оракл есть with для этого (т.е. вначале пишешь запрос, обзываешь его, а потом в нескольких местах можешь просто писать его синоним. Запрос будет выполняться всего один раз, но есть косяк - индексов у with нет => иногда стоит допускать выполнение запроса дважды)
А сколько данных в таблицах? Как долго работает запрос?в таблице данных мало, т.к. все в разработке
СУБД MS SQL Express 2005
В Оракл есть with для этого (У MS тоже есть. Т.е. если я вынесу этот селект в WITH то он будет делать его 1 раз не зависимо от того сколько раз я его буду подставлять?
Т.е. если набор id в обоих таблицах совпадает
select t1.id, case/decode/чего там в MS SQL (от столбца индикатора и от t1.Context, t2.Context)
from t1 inner join t2 on t1.id = t2.id
Если набор id в обоих таблицах пересекается, но в общем то различен
select case/decode/что-то еще для выбора ненулевого из t1.id и t2.id, case/decode/чего там в MS SQL (от столбца индикатора и от t1.Context, t2.Context)
from t1 outer join t2 on t1.id = t2.id
Точно не уверен про MS, но на Oracle join достаточно быстро прошел бы, т.к. для соединения использовался бы индекс по id.
да, уникален, надо попробовать.
Если все только в разработке. Может пока не поздно есть возможность пересмотреть архитектуру данных, что удобней доставать значения для ID. Хотя какая у вас там кухня не известно.
пересмотреть архитектуру данныхона мегагибкая, из-за этого такие навороты...
она мегагибкая
теперь такой вопрос:
Есть INSERT, который делается в таблицу с автоинкрементным полем ID.
Можно ли получать на лету ID только что вставленной строки или строк?
С расчетом на многопользовательность.
Сервер MS SQL 2005 Express.
@@IDENTITY
Оставить комментарий
nik93
как в одном запросе сделать:1. Первым селектом выборку определенных ID из таблицы
2. Вторым селектом сделать выборку определенных ID из другой таблицы, но чтобы они не совпадали с ID содержащимися в первой выборке. Голова уже не варит