从2个表中查询匹配条件的SQL

从2个表中查询匹配条件的SQL,sql,oracle,Sql,Oracle,我面临的问题是如何找到正确的SQL查询。我有一个RESTAPI调用 /order?[customerID=][year=][address=][item=][country=][code> 我必须执行一个sql查询,根据URL中的值返回订单(orderID,orderdesc)。在数据库中,我有两个表 表1 customerName customerID year orderID orderDesc country 表2 customerName customerID year address

我面临的问题是如何找到正确的SQL查询。我有一个RESTAPI调用

/order?[customerID=][year=][address=][item=][country=][code>

我必须执行一个sql查询,根据URL中的值返回订单(orderID,orderdesc)。在数据库中,我有两个表

表1

customerName
customerID
year
orderID
orderDesc
country
表2

customerName
customerID
year
address
item
quantity
orderID
我需要从表1中获取orderID和orderDesc,它满足以下条件:customerID、year、country等于表1中URL的值,以及customerID、year、address和表2中的item(记住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
在两个表中需要相同,条件是在内部联接后处于“开”状态。

这非常简单:

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
在两个表中必须相同,条件是内部联接后处于“开”状态。

正如Tim所建议的,我建议在继续之前进行规范化,但如果必须继续,一种可能的解决方案是使用联接

    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解析的值的参数


我希望这有帮助:)

正如Tim所建议的,我建议在继续之前进行规范化,但如果必须继续,一个可能的解决方案是使用联接

    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解析的值的参数


我希望这会有所帮助:)

您可以连接这两个表,并使用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

您可以联接这两个表,并使用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

您的两个表似乎没有正常化。在继续下一步之前,您可能需要阅读规范化方面的内容。是的。但不幸的是,当前数据库是我无法实际修改的:(您的两个表似乎没有进行规范化。您可能希望在继续之前阅读规范化。是的。但不幸的是,当前数据库是我无法实际修改的:(感谢您的快速回复。我尝试了此选项,似乎“on t1.orderID=t2.orderID”不起作用。因为结果显示了所有其他组合的orderDesc和orderID。也就是说,结果中有不同的orderID。但我相信所有其他组合都起作用了。您可以尝试选择t1.orderID,t1.orderDesc,t2.orderID for v。)查看两个“orderID”是相等的。你是对的。两个表都有相同的ID。似乎条件满足了更多不同ID的情况。无论如何,谢谢。你救了我一天,我将此标记为正确的ans。如果你认为这很好,也请对我的问题进行重击;)感谢您的快速回复。我尝试了此选项,似乎“on t1.orderID=t2.orderID”不起作用。因为结果显示了所有其他组合的orderDesc和orderID。也就是说,结果中有不同的orderID。但我相信所有其他组合都起作用了。您可以尝试选择t1.orderID,t1.orderDesc,t2.orderID for view两个“orderID”相等。你是对的。这两个表都有相同的ID。似乎条件满足了更多不同ID的情况。无论如何,谢谢。你救了我一天,我将此标记为正确的ans。如果你认为这很好,也请对我的问题进行重击;)是的。谢谢。乔纳森首先回答时,我将他的回答标记为已被接受。但是你的回答也是正确的,而且呈现得很好。砰的一声谢谢你的时间是的。谢谢。乔纳森首先回答时,我将他的回答标记为已被接受。但是你的回答也是正确的,并且呈现得很好。砰的一声谢谢你的时间是的。谢谢你简。As@Jonathan首先回答,我将他标记为被接受。但是你的ans也是正确的,表现良好。砰的一声。谢谢你的时间哈哈错过了第二次。谢谢你Jean。as@Jonathan首先回答,我将他标记为被接受。但是你的ans也是正确的,表现良好。砰的一声。谢谢你的时间哈哈错过了一次第二