SQL查询,我只能得到上半年

时间:2014-04-22 18:39:08

标签: sql oracle

您好我有一个关于我正在尝试创建的查询的问题。我想创建一个查询,列出成员的名字,以便谁签出了一本书并返回了所有书籍。我有一个查询(如下所示,如果返回日期不是NULL,则查找条目但我无法弄清楚如果他们有一个已退回的书,但仍然有另一本书没有返回,现在如何显示名称(返回日期=如果有人可以给我一些建议,下面是我的脚本。谢谢。

SELECT  MemName
FROM MEMBER, CHECK_OUT
WHERE MEMBER.ID = CHECK_OUT.MemID
AND CHECK_OUT.DateRet IS NOT NULL

2 个答案:

答案 0 :(得分:1)

如果我理解了您的要求,您想要一个能够返回当前已签出图书的所有成员的查询,是否正确?

这样的事情可能就是你想要的:

SELECT
    M.MemName
FROM
    MEMBER AS M
        INNER JOIN CHECK_OUT AS C ON (C.MemID = M.ID)
WHERE
    C.DateRet IS NULL

这将列出已签出某些内容的所有成员名称,但不会删除重复项。要仅列出每个名称一个,请使用SELECT DISTINT。要获取没有任何签出的名称(但在某一点上做过),请使用您的查询或修改我的C.DateRet IS NOT NULL。我个人喜欢在这种情况下使用INNER JOINS。

答案 1 :(得分:0)

  

我想创建一个查询,列出成员的名字,以查看曾经签出过一本或多本书并返回所有书籍的人。

SELECT MEMBER.MemName
FROM MEMBER, CHECK_OUT
WHERE MEMBER.ID = CHECK_OUT.MemID
group by MEMBER.ID, MEMBER.MemName
having max(nvl2(CHECK_OUT.DateRet, 0, 1)) = 0