2014-07-24 223 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.