Я столкнулся с проблемой найти правильный SQL-запрос. Я отдыхаю, вызов API
/order?[customerID=][year=][address=][item=][country=]
и мне нужно выполнить sql-запрос, чтобы вернуть порядок (идентификатор заказа, описание порядка) на основе значений в URL-адресе. В БД у меня 2 таблицы
Таблица 1
customerName
customerID
year
orderID
orderDesc
country
Таблица 2
customerName
customerID
year
address
item
quantity
orderID
Мне нужно получить orderID и orderDesc из Table1, которые удовлетворяют условию, что customerID, year, country равны значениям, как URL в Table1, а также customerID, year, address, item в Table2 (имейте в виду, что orderID должен быть таким же). Это возможно. Я новичок в SQL и изо всех сил пытаюсь найти решение. Любая помощь будет высоко ценится
Адрин
Да правда. Но, к сожалению, текущая база данных - это то, что я не могу изменить :(


Это очень просто:
select t1.orderID, t1.orderDesc
from Table1 t1
inner join Table2 t2 on t1.orderID=t2.orderID and t1.customerID=t2.customerID and t1.year=t2.year
Where t2.address=@address and t1.year=@year and t1.customerID=@customerID and t2.item=@item and t1.country=@country
Вы должны объявить вары или создать хранимую процедуру.
Для этого customerID должен быть одинаковым в обеих таблицах, условие находится в "ON" после внутреннего соединения.
Спасибо за быстрый ответ. Я пробовал этот вариант, похоже, что «on t1.orderID = t2.orderID» не сработало. потому что результат показывал orderDesc и orderId всех других комбинаций. т.е. у меня в результате разные идентификаторы заказа. Но я считаю, что все другие комбинации сработали
Вы можете попробовать выбрать t1.orderID, t1.orderDesc, t2.orderID, чтобы убедиться, что оба «orderID» равны.
Вы были правы .. У обеих таблиц одинаковый ID. Похоже, что условия удовлетворяют большему количеству случаев с другим идентификатором. Спасибо, в любом случае. Вы спасли мне день, и я отмечаю это как правильный ответ. Если вы думаете, что это хорошо, ответьте и на мой вопрос;)
Как предложил Тим, я рекомендую нормализацию, прежде чем продолжить, но если вы должны продолжить, одним из возможных решений было бы использование соединения.
SELECT t1.OrderID, t1.ORderDesc
FROM Table1 AS t1
INNER JOIN Table2 AS t2
ON t1.OrderID = t2.OrderID
WHERE t1.CustomerID = @CustomerID
AND t2.CustomerID = @CustomerID
AND t1.Year = @Year
AND t2.Year = @Year
AND t1.Country = @Country
AND t2.Address = @Address
AND t2.Item = @Item
Где @Item, @Year, @Country и @CustomerID - параметры для значений, извлеченных из URL-адреса.
Надеюсь, это поможет :)
Да. Спасибо, Жан. Как @Jonathan ответил первым, я помечаю его как принятый. но ваш ответ тоже правильный и хорошо представлен. бухает за это. Спасибо за уделенное время
Ха-ха пропустил на секунду
Вы можете ОБЪЕДИНЯТЬ обе таблицы и использовать предложение WHERE для фильтрации результатов на основе параметров, полученных API.
Однако, пожалуйста, не обращайте внимания на то, что это довольно некрасиво ... кажется, что между двумя таблицами есть много избыточной информации, и, как прокомментировал @TimBiegeleisen, вам лучше сначала нормализовать свои структуры данных; это сделало бы логику такого запроса намного чище.
select
a.customerID,
a.orderDesc
from table1 a
join table2 b
on b.orderID = a.orderID
and b.customerName = a.customerName
and b.year = a.year
and b.customerID = a.customerID
where
a.customerID = :CUSTOMERID
and a.year = :YEAR
and b.address = :ADDRESS
and b.item = :ITEM
and a.country = :COUNTRY
Да. Спасибо. Как @Jonathan ответил первым, я помечаю его как принятый. но ваш ответ тоже правильный и хорошо представлен. бухает за это спасибо за ваше время
Две ваши таблицы не нормализованы. Возможно, вы захотите прочитать о нормализации, прежде чем продолжить.