上面图片中的2条记录来自Db,上表中的Constraint是(SID和LINE_ITEM_ID), SID和LINE_ITEM_ID这两列都用于查找唯一记录。
我的问题: 我正在寻找一个查询,它应该根据条件从DB中获取 如果我搜索PART_NUMBER ='PAU43-IMB-P6' 1.如果搜索PART_NUMBER ='PAU43-IMB-P6',它应该从DB中获取一条记录,如果在SID = 1或SID = 2下只有一个被记录,那么该项属于哪个SID。 2.它应该从搜索PART_NUMBER ='PAU43-IMB-P6'的DB中获取一个仅在SID = 2下的记录,如果在SID = 1中有2个项目,而在SID = 2中有其他项目。
我正在寻找一个查询,它将根据SID 1和S两者搜索给定的part_number,它应该在SID = 2下返回值,并且只有在没有记录的情况下它才能返回SID = 1下的值SID = 2(查询必须承受百万条记录搜索的负载)。
谢谢
答案 0 :(得分:0)
Select *
from Table
where SID||LINE_ITEM_ID = (
select Max(SID)||Max(LINE_ITEM_ID)
from table
where PART_NUMBER = 'PAU43-IMB-P6'
);
答案 1 :(得分:0)
如果我理解正确,对于每个被考虑的LINE_ITEM_ID
,您只想返回SID
值最大的那个。这是一个常见的要求,与SQL中的大多数内容一样,可以用许多不同的方式编写;表现最佳将取决于许多因素,尤其是您正在使用的SQL产品。
这是一种可行的方法:
SELECT DISTINCT * -- use a column list
FROM YourTable AS T1
INNER JOIN (
SELECT T2.LINE_ITEM_ID,
MAX(T2.SID) AS max_SID
FROM YourTable AS T2
GROUP
BY T2.LINE_ITEM_ID
) AS DT1 (LINE_ITEM_ID, max_SID)
ON T1.LINE_ITEM_ID = DT1.LINE_ITEM_ID
AND T1.SID = DT1.max_SID;
那就是说,我不记得看到一个依赖于UNION
关系运算符的人。你可以使用INTERSECT
关系运算符轻松地重写上面的内容,但它会更详细。
答案 2 :(得分:0)
在我的情况下,它的工作原理如下:
select LINE_ITEM_ID,SID,price_1,part_number from (
(select LINE_ITEM_ID,SID,price_1,part_number from Table where SID = 2)
UNION
(select LINE_ITEM_ID,SID,price_1,part_number from Table SID = 1 and line_item_id NOT IN (select LINE_ITEM_ID,SID,price_1,part_number from Table SID = 2)))
此查询解决了我的问题..........