2011-08-08 108 views
2

我們有一個場景在這裏,我們需要返回的車,如果下面的條件是不正確的,不返回任何東西(或空),如果其真正PL/SQL的問題,甲骨文9i的

table-> from car_list 
condition where color = red and color_tinge = light and car = ? 

現在有能對於color = red和color tinge =任何東西都是多個值,我們只需要滿足兩種情況的值。 下面是表的樣本數據:

 
car color color_tinge 
a1 red  light 
a2 red  dark 
a1 green light 
a3 blue dark 

輸出數據應該是車#如果條件不爲真(我們傳遞 車號爲條件)和空或咱這條件爲真

任何幫助表示讚賞!

+0

對不起,您的描述很混亂。你可以通過增加輸出數據和預期的條件來擴展嗎? –

+1

請給我們提供更多的數據樣本(即預期輸出),以便我們更好地瞭解您的需求。 –

+0

好ive更新hte原來的問題,基本上我們需要的輸出是汽車#如果條件失敗(即顏色=紅色和顏色色澤=燈不是真),或作爲輸出爲null如果條件爲給定車號 – sandy

回答

-2

這將返回car#IDNULL。不知道我是否正確理解你想要的東西。

SELECT 
    CASE WHEN EXISTS 
     (SELECT * 
      FROM car_list 
      WHERE color = red 
      AND color_tinge = light 
      AND car = car#ID 
     ) 
     THEN NULL 
     ELSE car#ID 
    END AS Result 
FROM dual 

將這項工作?

SELECT Result 
FROM 
    (SELECT 
     CASE WHEN EXISTS 
      (SELECT * 
       FROM car_list 
       WHERE color = red 
       AND color_tinge = light 
       AND car = car#ID 
      ) 
      THEN NULL 
      ELSE car#ID 
     END AS Result 
    FROM dual 
) tmp 
WHERE Result IS NOT NULL 
+0

而不是null我們可以得到這個輸出正常的「沒有選擇行」? – sandy

+1

桑迪,在你的origianl問題中你特別要求查詢返回NULL,現在你想讓它返回「沒有選擇行」? – Ollie

0
DECLARE 
myCar VARCHAR(20); 

然後......

SELECT 
    car 
FROM 
    table 
WHERE 
    color != 'red' AND tinge != 'light' AND car = myCar 

或者......

SELECT 
    DECODE (color, 'red', DECODE (tinge, 'light', 'FAIL', 'PASS'), 'PASS') 
FROM 
    table 
WHERE 
    car = myCar 
+0

不幸的是,這不會在查詢 – sandy

+0

考慮汽車ID它會給你所有的汽車ID不是淺紅色的汽車。這不是你想要的嗎? – Chains

+0

我想通過它的車身份證,然後檢查上面提到的 – sandy

0

初始化...

CREATE TABLE YOURTABLE( CAR VARCHAR2(20 BYTE), COLOR VARCHAR2(20 BYTE), TINGE VARCHAR2(20 BYTE));插入您的數值 ('a1','紅色','燈');插入自定義值('a2','紅色','黑暗');插入您的值('a1','綠色','燈');插入您的值('a1','綠色','燈');插入自定義值('a3','藍色','黑暗');

COMMIT;

SELECT * FROM YOURTABLE;

則...

SET serveroutput ON 
DECLARE 
    ret VARCHAR2(10); 
    CURSOR c_cur (p1 VARCHAR2) 
    IS 
    SELECT COUNT(1) 
    FROM YOURTABLE 
    WHERE color = 'red' 
    AND tinge = 'light' 
    AND CAR  = p1; 
BEGIN 
    OPEN c_cur('a2'); 
    FETCH c_cur INTO ret; 
    IF ret = 1 THEN 
    dbms_output.put_line('pass'); 
    ELSE 
    dbms_output.put_line('fail'); 
    END IF; 
END; 
2

選擇轎廂從 car_list 其中 不(顏色= '紅' 和color_tingle = '光') 和汽車= car_id;