2016-01-21 127 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