2016-01-21 58 views
-3

我有以下表格:SQL查詢條件的if else

DOCUMENT(iddoc,doctype,title,publishingdate,validTillDate) 
USERS(iduser,fname,lname) 
TRANSACTION(idtrans,iduser,iddoc,transdate,schedulereturndate) 

我問指示給定文件是否可用與否,如果它是由人借來的,而當它應該被退回。所以我怎麼能在我的查詢中有這些條件。

在我的代碼將是這樣的:

if(d.validTillDate < SYSDATE){ 

SELECT u.iduser t.schedulereturndate 
FROM USERS u, TRANSACTION t 
WHERE u.iduser=t.iduser 

} 

所以我想知道我怎麼可以這個代碼IF

+0

你可以請張貼一些數據,你已經嘗試了什麼,你面臨的問題? – Aleksej

+0

1. mysql和oracle是2種不同的產品。請刪除不必要的標籤。 2.請提供樣品數據和預期產出。請描述你到目前爲止嘗試達到預期結果所遇到的問題。 – Shadow

+0

爲什麼你檢查'validitydate'來查看物品是否可用。不應該檢查'schedulereturndate'? –

回答

0

對於借來的文檔的查詢會是這樣的:

SELECT d.iddoc,u.iduser t.schedulereturndate,'Borrowed' 
    from document d, 
     ,USERS u 
     ,TRANSACTION t 
    WHERE u.iduser=t.iduser 
    and t.iddoc=d.iddoc 
    and d.validitydate<sysdate 
    union 
SELECT d.iddoc,null,null,'Not borrowed' 
    from document d, 
    WHERE d.validitydate is null 
    or d.validitydate>=sysdate 

編輯)爲未借入文件添加了一個工會。

+0

我必須指出它是否沒有借用 –

+0

隱式JOIN sintaxis自SQL 2005以來已棄用,請使用顯式JOIN來代替http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins Aaron Bertrand寫了一篇文章好文章關於它http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx –

+0

它完全工作謝謝你:D –

0

很難理解你對我的問題。 如果我猜正確的,那麼:

SELECT d.iddoc, u.iduser, t.schedulereturndate 
FROM 
    document d 
    LEFT JOIN transaction t ON 
     (d.iddoc=t.iddoc) 
      -- join by iddoc field 
     AND (SYSDATE BETWEEN t.transdate AND t.schedulereturndate) 
      -- I assume we need only current transactions, not past (or future?) 
WHERE 
    (SYSDATE<=d.validTillDate) 
     -- I assume we need only documents whose validity date not passed yet 

假設存在用於iddoc沒有活動事務= 1,iddoc一個活動事務= 2和用於iddoc = 3兩種活性的交易,其結果將是這樣的:

iddoc | iduser | schedulereturndate 
------+--------+------------------- 
1  NULL  NULL 
2  534  2017-09-08 
3  54334 2016-03-02 
3  2433  2016-07-01