Ganesh_mca Ответов: 4

Как найти несопоставимые строки из двух таблиц?


Привет,

у меня есть две таблицы, одна для позволяет занять столик имеет один столбец, и он имеет значения строк, как 1,2,3,4,5. А Б таблица имеет столбец 'ID' и оно имеет ряд значений, как 3,4,
и я хочу, чтобы вывод был похож только на 1,2,5.

Таблица А Таблица Б
id id
1 3
2 4
3
4
5


выход:

идентификатор
1
2
5




я использую "не в".но я не получил точного решения, может ли какой-либо орган сказать мне ответ.

Заранее спасибо

4 Ответов

Рейтинг:
31

Sandeep Mewara

Попробуй:

SELECT 
   TableA.Id
FROM 
   TableA
WHERE
   TableA.Id NOT IN 
    (
       SELECT TableB.Id FROM TableB
    )


[no name]

5!

Prasad_Kulkarni

Мои 5!

Ganesh_mca

ОК, благодарим вас.. я понял...

Prasad_Kulkarni

Затем формально "принять решение"

Rahul Rajat Singh

это решение нормально, но я сомневаюсь, что если поле ID одинаково в двух таблицах, но поле данных отличается. Я не думаю, что это сработает тогда. мы должны будем иметь проверку всех полей в предложении where.

почему бы вместо этого не использовать ключевое слово except. он будет сверяться со всеми полями. Я думаю, что это более эффективный ОО, поскольку его единственная цель-сделать то, что было желательно в этом вопросе. проверьте мой ответ.

Prasad_Kulkarni

Да. Вы совершенно правы. Я согласен с вами.

Но, в вопросе OP din не упоминал ничего, кроме ID. И Сандип ответил соответствующим образом на его вопрос.

Без сомнения, ваш ответ будет полезен, когда есть более одной колонки, но здесь, как вопрос ОП, это также точный ответ.

Sandeep Mewara

Верно, но то же самое верно и для вашего ответа... поскольку схема таблицы (я полагаю, по крайней мере, первичный ключ) должна быть одинаковой для него. Иначе это не сработало бы.

Но пока, судя по вопросу, это хорошо.

Rahul Rajat Singh

Кстати, +5 за решение.

Рейтинг:
28

Rahul Rajat Singh

Я думаю, что вы можете сделать это с помощью except ключевое слово.

вот что я попробовал и это сработало

select * from TableA 
except
select * from TableB


Prasad_Kulkarni

Молодец, Рахул!

Rahul Rajat Singh

спасибо вам. у меня также есть некоторые замечания по принятым ответам. проверьте выше.

Sandeep Mewara

И мои 5 тоже! Хороший ответ.

Ganesh_mca

очень просто и хорошо, спасибо Рахул

Rahul Rajat Singh

пожалуйста.

Sandeep Mewara

Да, хороший! Но мой ответ был также ответом на ваш вопрос. :)

Не берите в голову.

Rahul Rajat Singh

Я тоже согласен, что ваш ответ был решением проблемы. и лучше всего то, что вы дали ответ так быстро, что я был поражен. Я читал вопрос, и к тому времени у тебя уже был ответ. Очень нравится, что. думаю, мне есть чему поучиться у таких гуру, как ты.

Rahul Rajat Singh

спасибо.

Рейтинг:
12

Prasad_Kulkarni

Попробовать это:

SELECT * FROM TableB T2
WHERE NOT EXISTS 
(SELECT * FROM TableA T1 WHERE T1.ID = T2.ID)


Rahul Rajat Singh

+5 к раствору/

Prasad_Kulkarni

Спасибо тебе, Рахул!

Sandeep Mewara

Похоже, кто-то проголосовал за вас только потому, что круговая закрывающая скобка отсутствует! :до:
Не важно, похоже, он был парнем с низкой репутацией.

Prasad_Kulkarni

Да, сейчас обновлено! :)

Рейтинг:
0

Member 14758249

Рассмотрим две таблицы A , B . Таблица A содержит следующие поля , такие как ID, Product_Key,
таблица B имеет Product_Key.

Таблица А Таблица Б
Идентификатор Ключ_продукта Ключ_продукта
1 05 05
2 06 06
3 07 07
4 09 08
02
Цель состоит в том, чтобы получить непревзойденный идентификатор и Product_Key, используя эти две таблицы .
Выход будет выглядеть так :
Идентификатор Ключ_продукта
1 05
2 06
3 07

Решение :
Выберите.ИДЕНТИФИКАТОР ,
а.Ключ_продукта
ОТ А
Где Ключ_продукта не в
(
Выберите ключ.Product_Key
От А как а
Внутреннее соединение B как b
На A. Product_Key = B. Product_Key
)


CHill60

Причина моего понижения: ваш сценарий совсем не ясен, но главным образом потому, что этот подзапрос можно упростить, и когда вы это сделаете, вы получите решение 1 более чем 7-летней давности.