【问题标题】:Multiple selects and comparisons in sqlsql中的多项选择和比较
【发布时间】:2015-04-09 20:55:56
【问题描述】:
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 列,其中包含相同的值。但是,我不确定如何在一个语句中使用和执行登录检查。以上是我所做的尝试之一,目前不正确,因为它需要为客户 ID 添加连接,但我不确定由谁执行此操作。另外,我使用的 sql 驱动程序是 Apache Derby,以防有人想知道

【问题讨论】:

  • 这不行吗?这是什么数据库?
  • @BAReese 在 jdbc 中使用 derby 驱动程序。当我运行这个查询时,它给了我这个错误:java.sql.SQLSyntaxErrorException: Syntax error: Encountered "FROM" at line 1, column 127。
  • 是的,听起来可能是多余的逗号。 “FROM”不是一列,即使是数据库也不知道下一步该做什么。

标签: sql select subquery


【解决方案1】:

您的查询很好,但您需要在最后选择“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

【讨论】:

  • 我不建议使用join 和group by。使用in 或exists。
【解决方案2】:

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

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)";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多