在sql中进行多次选择和比较

时间:2015-04-09 20:55:57

标签: sql select subquery

String sql = "
    SELECT NAME, 
           SURNAME, 
           ORDERID, 
           CUSTOMERID, 
           PRIORITY, 
           STATUS, 
           DATE, 
           TIME 
    FROM ORDERS O 
    WHERE O.CUSTOMERID IN "
            + "(SELECT LOGGEDIN 
                FROM CUSTOMERS 
                WHERE LOGGEDIN=1)";

我有两个表叫做客户,一个叫做订单。在我的客户表中,我想要检索当前登录到系统的所有人,然后将其与我的订单表进行匹配,以查看他们当前是否还有待处理的订单。这两个表都包含一个包含相同值的customerid列。但是,我不确定如何在一个语句中使用和执行登录检查。以上是我所做的尝试之一,目前是不正确的,因为它需要为customerid添加一个连接,但我不确定是谁将其执行。另外,我使用的sql驱动程序是Apache Derby,以防有人想知道

2 个答案:

答案 0 :(得分:0)

你几乎得到了它 - 至少有一个解决方案......我猜你错了,因为你的子查询中有一个流氓逗号:

String sql = "SELECT NAME, SURNAME, ORDERID, CUSTOMERID, PRIORITY, STATUS, DATE, TIME "
           +  "FROM ORDERS O WHERE O.CUSTOMERID IN (SELECT LOGGEDIN, FROM CUSTOMERS WHERE LOGGEDIN=1)";

答案 1 :(得分:0)

您的查询没问题,但您需要在结尾处选择“CUSTOMERID”

 ... IN (
 SELECT CUSTOMERID
 FROM CUSTOMERS 
 WHERE LOGGEDIN=1 )

但我建议用户加入。 要查看有待处理订单的用户:

SELECT C.* 
FROM CUSTOMERS C
INNER JOIN ORDERS O 
ON O.CUSTOMERID = C.CUSTOMERID
WHERE C.LOGGEDID = 1
GROUP BY C.CUSTOMERID

按用户查看待处理订单:

SELECT *
FROM ORDERS O
INNER JOIN CUSTOMER C 
ON O.CUSTOMERID = C.CUSTOMERID AND C.LOGGEDID = 1