Отношения один ко многим со многими столбцами
Я ОЧЕНЬ новичок в SQL и не знаю много об этом, но я быстро учусь. У меня есть база данных с идентификаторами предметов и количествами в наличии (qoh) вместе с некоторыми другими столбцами, с которыми у меня нет проблем. Проблема в том, что когда я говорю, чтобы он дал мне столбец идентификатора элемента со столбцом qoh, он дает мне почти 500 строк для каждого отдельного элемента, потому что qoh отличается, поэтому у меня буквально около 12 миллионов строк. Теперь, что я ищу, так это самое последнее количество для каждого товара. Я предполагаю, что это отношение один ко многим, и, поскольку я не знаком с SQL, я даже не знаю, с чего начать. Это то, что я до сих пор:
SELECT DISTINCT item_id, qty_on_hand
FROM database.inv_mast, database.inv_loc
ORDER BY item_id ASC
О, и я использую Microsoft SQL Server Management Studio
Вот что я хочу:
| item_id |qty_on_hand|
|123456789| 93 |
|456789123| 87 |
|789456123| 74 |
и т.п.
Но то, что я получаю, это:
| item_id |qty_on_hand|
|123456789| 85 |
|123456789| 82 |
|123456789| 92 |
и т.п.
Я получаю один и тот же item_id по крайней мере 4000 раз, потому что база данных сообщает мне, для чего был qoh буквально каждую секунду, так как у нас был этот предмет. Я хочу только то, что находится на складе во время выполнения запроса. Я прошу прощения за все noobness, но я буквально не знаю SQL.
2 ответа
Вы делаете перекрестное соединение, просто используя ",". Я думаю, вам нужно внутреннее соединение.
SELECT DISTINCT im.item_id, qty_on_hand
FROM database.inv_mast im
INNER JOIN database.inv_loc in on im.item_id = in.item_id
ORDER BY item_id ASC
Вы также должны смотреть на левые и правые соединения.
Таким образом, в итоге использование "," похоже на использование перекрестного соединения
Вы действительно должны изучить объединения, чтобы понять эти запросы, проверьте сайт ниже.
Пункт из FROM database.inv_mast, database.inv_loc
создает декартово произведение. Сузить, используя WHERE
состояние.