2011-05-10 77 views
1
从数据库中获取一个共同的价值

enter image description here如何使用UNION

2项记录在上面的图像是从数据库,在上述表约束的(SID和LINE_ITEM_ID), SID和LINE_ITEM_ID两列被用来寻找一个独特的记录。

我的问题: 我找了一个查询就应该根据情况 如果我搜索获取从DB的PART_NUMBER条记录=“PAU43-IMB-P6” 1.应该从DB如果搜索获取一个记录对于PART_NUMBER ='PAU43-IMB-P6',如果在SID = 1或SID = 2下只有一个记录,则无论该项属于哪个SID。 2)它应该获取SID = 2下的一个记录只有从DB上搜索PART_NUMBER ='PAU43-IMB-P6'时,如果在SID = 1中有两个项目,其他的在SID = 2中。

我正在寻找一个查询,它将根据SID 1和2来搜索给定的part_number,并且它应该在SID = 2下返回值,并且只有在没有记录时才能返回SID = 1下的值在SID = 2下(查询必须承受百万记录搜索的负载)。

谢谢

+0

为什么要用'UNION'?家庭作业? – onedaywhen 2011-05-10 06:20:48

+0

,因为我需要从2或3中获得1条记录,UNION只在所有检索列的值相同的情况下工作。但是,如果任一列值不同,它会将该记录视为不同的记录,即使其余的列值是相似的.... – Warrior 2011-05-10 06:41:24

回答

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

这个查询解决了我的问题..........

0
Select * 
    from Table 
where SID||LINE_ITEM_ID = (
          select Max(SID)||Max(LINE_ITEM_ID) 
           from table 
          where PART_NUMBER = 'PAU43-IMB-P6' 
          ); 
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关系运算符轻松地重写上面的内容,但它会更详细。