Объединение двух таблиц, когда одна таблица имеет несколько соответствующих значений - PullRequest
0 голосов
/ 13 июля 2020

Для некоторой предыстории, у меня есть система заказов, которая заполняет базу данных. В базе данных есть две таблицы, order_Parent, order_Children.

order_Parent содержит более широкую информацию, такую ​​как ID, shippingDesination, createdBy, highPriority. Столбцов больше, но я сосредоточился на столбце ID и highPriority для order_Parent.

При просмотре таблицы order_children у одного родительского заказа может быть несколько дочерних элементов. Дочерние элементы являются отдельными частями заказа, а некоторые столбцы - это itemDescription, количество, приоритет, linkID. Опять же, столбцов больше, но для таблицы order_Children меня беспокоят только столбец linkID и столбец приоритета.

Например, предположим, что Джон Смит заказывает 3 винта, 2 гайки, 1 болт. Все они могут иметь разные приоритеты в столбце приоритета. Что меня беспокоит, так это то, если это приоритет 1, что означает, что мне нужно ускорить заказ.

Итак, после выполнения этого заказа таблицы будут выглядеть так:

order_Parent:
ID: 15
shippingDesination: 123 Road St
created Автор: John Smith
highPriority: null

order_Children:
itemDescription: винты
количество: 3
приоритет: 1
linkID: 15

itemDescription: гайки
количество: 2
приоритет: 0
linkID: 15

itemDescription: болты
количество: 1
приоритет: 0
linkID: 15

Итак, здесь мы видим, что дети могут иметь разные приоритеты. Затем я хочу обновить строку order_Parent highPriority до 1, если какие-либо соответствующие дочерние элементы имеют приоритет 1.

Я подумал о том, чтобы объединить таблицы вместе, используя linkID и ID в качестве общей точки. Но я не знаю, как присоединиться, когда есть несколько дочерних экземпляров с тем же идентификатором, что и у родительского.

После того, как я сделаю таблицу, я считаю, что следующим шагом будет просмотр приоритетов child_Order и наличие равно 1, используйте функцию UPDATE для обновления соответствующей строки в таблице order_Parent.

Это то, что у меня есть до сих пор, но оно возвращает слишком много строк, многие строки кажутся дубликатами, но я Я не уверен, почему, потому что я только начал SQL. Я также не добавил в запрос функцию UPDATE, но хотел бы знать, в каком направлении go дюйм.


    SELECT Parent.ID AS ID
    ,Parent.HighPriority AS HighPriority
    ,order_Children.Priority AS Priority
    
    FROM order_Parent, order_Children
    INNER JOIN order_parent AS Parent ON Parent.ID = order_Children.linkID

1 Ответ

0 голосов
/ 13 июля 2020

Этот синтаксис создаст CROSS JOIN .

FROM order_Parent, order_Children

Другой хороший пример CROSS JOINs.

Синтаксис, который вы ищете для

SELECT Parent.ID AS ID
    ,Parent.HighPriority AS HighPriority
    ,order_Children.Priority AS Priority
    FROM order_Children
    INNER JOIN order_parent AS Parent ON Parent.ID = order_Children.linkID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...