gpt4 book ai didi

sql - 如何进行删除值的联接?

转载 作者:行者123 更新时间:2023-12-04 21:29:55 25 4
gpt4 key购买 nike

Customers            Holidaysid | name            customer_id | start  | end---+------           ------------+--------+------ 1 | Peter           1           |   5    | 10 2 | Simon           1           |  15    | 20 3 | Mary            2           |   5    | 20

什么是有效的 SQL 查询,它可以让我在特定日期没有节假日的所有客户? 例如日期=12

  • 彼得
  • 玛丽

这甚至可以通过简单的 SQL 连接来管理,还是我需要使用子查询?

最佳答案

首先创建一个查询,找到与您想要的相反的内容:在该特定日期有假期的客户:

SELECT DISTINCT name
FROM Customers
JOIN Holidays
ON id = customer_id
WHERE start <= 12 AND end >= 12

结果:

Simon

然后将此结果连接回客户表,并选择连接失败的结果:

SELECT name
FROM Customers
LEFT JOIN (
SELECT DISTINCT id
FROM Customers
JOIN Holidays
ON id = customer_id
WHERE start <= 12 AND end >= 12
) AS T1
ON Customers.id = T1.id
WHERE T1.id IS NULL

结果:

Peter
Mary

请注意,JOIN 并不是这里唯一的选择。您也可以使用 NOT EXISTSNOT INEXCEPT .由于您没有指定哪个数据库,我选择了 JOIN,因为它是在所有主要关系数据库中执行此操作的一种可移植且高效的方式。

我使用的测试数据(取自问题):

CREATE TABLE Holidays (customer_id INT NOT NULL, start INT NOT NULL, end INT NOT NULL);
INSERT INTO Holidays (customer_id, start, end) VALUES
(1, 5, 10),
(1, 15, 20),
(2, 5, 20);

CREATE TABLE Customers (id INT NOT NULL, name NVARCHAR(100) NOT NULL);
INSERT INTO Customers (id, name) VALUES
(1, 'Peter'),
(2, 'Simon'),
(3, 'Mary');

关于sql - 如何进行删除值的联接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2587156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com