【问题标题】:How to join tables without using join SQL如何在不使用连接 SQL 的情况下连接表
【发布时间】:2022-07-01 04:40:35
【问题描述】:

我正在尝试编写一个 SQL 查询来从多个表中获取信息并输出最终结果:所有尚未发出库存请求的客户的列表。显示客户编号就足够了。

我不允许使用内连接或任何类型的连接来实现这一点。

到目前为止,这是我想出的。

SELECT c.clientNum
FROM client AS C, Stock_Request AS SR
WHERE C.clientNum NOT IN SR.ClientNum 

当前的尝试没有返回想要的结果。

以下是表格中的信息:

(client) 
    INSERT INTO Client (clientName)
        VALUES ('Mike');
    INSERT INTO Client (clientName)
        VALUES ('John');
    INSERT INTO Client (clientName)
        VALUES ('Sally');
    INSERT INTO Client (clientName)
        VALUES ('Margret');
    INSERT INTO Client (clientName)
        VALUES ('Max');

(stock request)
INSERT INTO Stock_Request (requestDate, clientNum)
    VALUES ('2020-12-10',1);
INSERT INTO Stock_Request (requestDate, clientNum)
    VALUES ('2020-05-04',2);
INSERT INTO Stock_Request (requestDate, clientNum)
    VALUES ('2021-07-06',3);
INSERT INTO Stock_Request (requestDate, clientNum)
    VALUES ('2021-07-08',4);
INSERT INTO Stock_Request (requestDate, clientNum)
    VALUES ('2022-02-07',5);

任何帮助将不胜感激。

【问题讨论】:

  • 您目前想出的是使用 JOIN,只是使用了已经过时几十年的过时语法。您对不能毫无意义地使用 JOIN 的限制,因为您不能在不使用 WHERE 子句中至少使用子查询的情况下执行任务。为什么不能使用 JOIN?
  • 对我来说看起来不错。您收到错误消息吗?你是如何执行查询的?
  • 你能解释一下为什么不允许你使用join吗?这是家庭作业还是什么?
  • FWIW, NOT IN 后面应该跟一个包含值列表或子查询的括号。请参阅documentation for the IN() predicate

标签: mysql sql


【解决方案1】:

你可以通过这段代码来实现:

SELECT clientNum FROM `client`
WHERE clientNum 
NOT IN (SELECT clientNum FROM stock_request GROUP BY clientNum);

您不需要在主SELECT 上指示stock_request 表,您只需要使用stock_request 表通过使用IN 获取子查询中的所有clientNum,我认为您使用@987654326 @错误的方式。

查看更多关于MySQL IN Operator的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多