如何使用UNION从数据库中获取一个公共值

时间:2011-05-10 05:14:24

标签: sql unions

enter image description here

上面图片中的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(查询必须承受百万条记录搜索的负载)。

谢谢

3 个答案:

答案 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)))

此查询解决了我的问题..........