Отношения один ко многим со многими столбцами

Я ОЧЕНЬ новичок в 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

Вы также должны смотреть на левые и правые соединения.

Таким образом, в итоге использование "," похоже на использование перекрестного соединения

Вы действительно должны изучить объединения, чтобы понять эти запросы, проверьте сайт ниже.

http://www.w3schools.com/sql/sql_join.asp

Пункт из FROM database.inv_mast, database.inv_loc создает декартово произведение. Сузить, используя WHERE состояние.

Другие вопросы по тегам