2014-07-24 184 views
0

非常简单。这个声明有什么问题。Oracle SQL选择列等于多个值

SELECT DISTINCT CUST_FNAME "FIRST NAME", CUST_LNAME "LAST NAME", POS_TIME "TIME", POS_DATE "DATE" FROM POS, CUSTOMER 
WHERE CUST_NUM = POS_CUST_NUM AND POS_ITEMID = 1 AND POS_ITEMID = 2; 
+0

你得到一个语法错误或没有得到你想要的结果? –

+0

POS_ITEMID = 1 AND POS_ITEMID = 2将始终评估为false。 –

+0

单个字段不能是2个事物。你的意思是说你想要这个领域,当它是或者?在这种情况下,你会在(1,2) –

回答

1

我想你可能想谁是这两个项目1和2。在这种情况下,你可以使用相关的客户如下:

select x.*, pos_time, pos_date 
    from (SELECT CUST_NUM, CUST_FNAME, CUST_LNAME 
      FROM POS 
      join CUSTOMER 
      on CUST_NUM = POS_CUST_NUM 
     where POS_ITEMID = 1 
     intersect 
     SELECT CUST_NUM, CUST_FNAME, CUST_LNAME 
      FROM POS 
      join CUSTOMER 
      on CUST_NUM = POS_CUST_NUM 
     where POS_ITEMID = 2) x 
    join pos 
    on x.cust_num = pos.pos_cust_num 
where pos_itemid in (1, 2) 
+0

是的,我试过,但它不返回我想要的,它返回类似于OR – Snoopy101x

+0

@ Snoopy101x您是否尝试过上述的相交查询? –

+0

@ Snoopy101x上面的交叉查询与您的原始查询非常不同,这不是我添加的唯一部分。 –

0

它必须是OR ...列不能有两次相同的值。

SELECT DISTINCT CUST_FNAME “名”,CUST_LNAME “姓”,POS_TIME “TIME”,POS_DATE “DATE” FROM POS,CUSTOMER WHERE CUST_NUM = POS_CUST_NUM AND(POS_ITEMID = 1 OR POS_ITEMID = 2) ;

我在查询中添加了圆括号。我希望这有帮助。

编辑:或者像Brian DeMilia说,在他的评论中,POS_ITEMID使用(1,2)

+0

我试过POS_ITEMID =(1,2),但出现错误“此操作员必须跟随任何或全部” 我是当客户购买了第1项和第2项时,试图让它到达它选择的位置,只是不确定语法。 – Snoopy101x

+0

@ Snoopy101x他打算说IN,但这不是你想要的,因为它会显示有或者不一定是两者的顾客。请参阅下面的答案。 –

+0

我的解决方案不适合您的要求。抱歉! – Christian

0

不确定,但这可能会比上面Brian做的相交更有效一些。另外,我现在无法访问数据库,所以我的语法可能会稍微偏离。

select CUST_NUM, CUST_FNAME, CUST_LNAME, pos_time, pos_date 
from CUSTOMER c1,POS p1 
where c1.cust_num = p1.pos_cust_num 
and p1.pos_itemid=1 
and exists (select 'x' from 
      pos p2 
      where p2.pos_cust_num=p1.pos_cust_num 
      and p2.pos_itemid=2) 

基本上,给我大家在有序为itemid 1和其中存在的记录,其中责令同一客户为itemid 2.