Oracle SQL选择其中列等于多个值

Oracle SQL选择其中列等于多个值,sql,oracle,select,where,Sql,Oracle,Select,Where,非常直截了当。这句话有什么不对 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; 我认为您可能需要同时与第1项和第2项关联的客户。在这种情况下,您可以使用以下选项: selec

非常直截了当。这句话有什么不对

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;

我认为您可能需要同时与第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)

不确定,但这可能比Brian在上面做的intersect更有效率。另外,我现在没有访问数据库的权限,所以我的语法可能有点不正确

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)

基本上,请告诉我每个人,其中ordered itemid为1,记录存在于同一客户订购itemid为2的位置。

您是否收到语法错误或没有得到所需的结果?POS_itemid=1和POS_itemid=2将始终计算为false。单个字段不能是两件事。你的意思是当字段为或时,你想要它吗?在这种情况下,您将在(1,2)中使用POS_ITEMID,不获取任何语法错误,只获取“No rows selected”,我试图让它选择购买这两个项目的位置,而不是1或另一个。“或的工作方式与我想要的结果不同,并且只返回与或相同的结果”。@Snoopy101x有几种解决方法。一种方法是“相交”,请参见下面我的查询。你也可以在一个内联视图中聚合并加入到计数为2的视图中OR@Snoopy101x您尝试过我上面的intersect查询吗?@Snoopy101x上面的intersect查询与您原来的查询非常不同,这不是我添加的唯一部分。我尝试了第一个,但在x.cust_num处得到了无效标识符,当我将x更改为customer(表的名称)时,仍然得到了无效标识符。@Snoopy101x我在上面的编辑中添加了cust_num字段,现在应该运行了。如果没有,请告诉我。我对哪些表包含哪些字段做了一些假设。