Объединение / объединение записей из двух не связанных таблиц на основе определенного столбца - PullRequest
0 голосов
/ 03 июня 2018

У меня есть две таблицы:

  • Items

    • ItemId PK - первичный ключ
    • UPC,
    • EAN
  • TDItems

    • TdItemsId PK - первичный ключ
    • UPC,
    • EAN

Эти две таблицы не связаны в моей БД через ограничение FK.

Таблицы содержат элементы, которые используют одну и ту же информацию, на основе которой я хочу присоединить / объединить их: UPCи столбцы EAN

Я пытался выполнить простой запрос, подобный следующему:

select * 
from Items as It join TDItems as tdi
on it.UPC=tdi.UPC and it.EAN=tdi.EAN

Этот запрос возвращает «некоторые» результаты, однако, когда я сделал объединение из двух запросов, подобных этому:

  select * 
    from Items as It join TDItems as tdi
    on it.UPC=tdi.UPC 

    UNION -- important part I guess?

    select * 
    from Items as It join TDItems as tdi
    on it.EAN=tdi.EAN 

Первый запрос возвращает 504 результата, а второй запрос возвращает 709 результатов ...

Итак, мои вопросы:

  1. Почему первый запрос возвращает меньше результатов, когдадолжно быть так же?
  2. Как мне сделать этот запрос, чтобы он возвращал количество найденных строк (т. Е. 504, 600 или любое другое число?)

Может кто-нибудь мне помочьнаписать правильный запрос для этих проблем?

Редактировать:

Привет @Gordon Я переписал внутреннее соединение

select * 
from Items as It join TDItems as tdi
on it.UPC=tdi.UPC OR it.EAN=tdi.EAN

Было бы это решение, чтобы иметьэлементы соответствуют либо в UPC, либо в EAN (то есть не обязательно должны совпадать пары UPC и EAN)

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

UNION больше похоже на OR

Запрос будет больше похож на UNION

select * 
from Items as It 
join TDItems as tdi
  on it.UPC = tdi.UPC 
  or it.EAN = tdi.EAN
0 голосов
/ 03 июня 2018

ЭТО ОТВЕТИТ НА ОРИГИНАЛЬНУЮ ВЕРСИЮ ВОПРОСА.

Я не вижу причин, по которым запросы будут возвращать одинаковое количество строк.Это зависит только от данных.Например, первый запрос может не возвращать строк, если между двумя таблицами нет общих пар UPC / EAN, но две таблицы имеют общие значения UPC и EAN независимо.

Что касается вашего второго вопроса, вы, кажется, хотите select count(*) вместо select item.

...