SQL1通过table1中的另一个查询从table1中扣除查询

时间:2017-05-18 14:11:19

标签: mysql

我有一个查询显示客户从table_1完成的第一次预订。为了找到下一个预订,我认为我对table_1使用相同的查询,并且它不能包含在我的第一个查询中。

每个预订都可以通过身份证明来识别。我首先想到我可以这样做:[STACKOVERFLOW HELP] [1]。我搜索了这个主题,但没有找到答案。也许是因为我使用了错误的短语。请参阅下面的示例以便更好地理解。

TABLE_1(包括所有数据):

ID  BV  CLIENT  Booking_DATE
1   2   1       01.01.2017
2   35  2       02.01.2017
3   1   3       03.01.2017
4   24  4       04.01.2017
5   1   5       05.01.2017
6   3   3       06.01.2017
7   19  4       07.01.2017
8   523 5       08.01.2017
9   23  4       09.01.2017
10  12  5       10.01.2017
11  51  4       11.01.2017
12  12  5       12.01.2017
13  5   6       13.01.2017

表1a - 仅包括第一次预订(每位客户):

ID  BV  CLIENT  Booking_DATE
1   2   1       01.01.2017
2   35  2       02.01.2017
3   1   3       03.01.2017
4   24  4       04.01.2017
5   1   5       05.01.2017
13  5   6       13.01.2017

表1b - 包含table1 WITHOUT table1a的所有表。

ID  BV  CLIENT  Booking_DATE
6   3   3       06.01.2017
7   19  4       07.01.2017
8   523 5       08.01.2017
9   23  4       09.01.2017
10  12  5       10.01.2017
11  51  4       11.01.2017
12  12  5       12.01.2017

有什么想法吗?从表1b开始,我想再次进行“第一次预订”,因此基本上我正在寻找来自table1a的人们第一次重新预订。

谢谢!

Table1a的完整查询如下所示(上面我刚刚提供了一个了解逻辑的示例):

选择s_aufgabenID AS IDs_aufgabenAN_ID AS USERs_aufgaben。{{1} } AS BEN_IDBUSINESSs_aufgabenERLEDIGT_DATUMs_aufgabenGesamtbetragnettos_aufgabenSET_DATEs_benutzer_auftragnehmer 来自REGISTRATION_DATE 正确加入s_aufgaben开启(s_benutzer_auftragnehmers_aufgaben = AN_IDs_benutzer_auftragnehmer) WHERE((({BEN_IDs_aufgaben> 0)AND(AN_IDs_aufgaben ='3'))AND(status。{{1 }}>'0000-00-00 00:00:00'))和(s_aufgabenERLEDIGT_DATUM<>'41385.00')) 按s_aufgaben分组 ORDER BY BEN_IDUSER asc

[1]:How to select all records from one table that do not exist in another table? s_aufgaben

2 个答案:

答案 0 :(得分:0)

这可能有助于你

;WITH Table1a(ID,BV,CLIENT,Booking_DATE)
AS
(
SELECT 1 ,  2  , 1 ,      '01.01.2017' Union all
SELECT 2 ,  35 , 2 ,      '02.01.2017' Union all
SELECT 3 ,  1  , 3 ,      '03.01.2017' Union all
SELECT 4 ,  24 , 4 ,      '04.01.2017' Union all
SELECT 5 ,  1  , 5 ,      '05.01.2017' Union all
SELECT 13,  5  ,  6,      '13.01.2017' 
)
,Table1b (ID,  BV,  CLIENT,  Booking_DATE)
AS
(
SELECT 6 ,  3  , 3 ,'06.01.2017' union all
SELECT 7 ,  19 , 4 ,'07.01.2017' union all
SELECT 8 ,  523, 5 ,'08.01.2017' union all
SELECT 9 ,  23 , 4 ,'09.01.2017' union all
SELECT 10,  12 , 5 ,'10.01.2017' union all
SELECT 11,  51 , 4 ,'11.01.2017' union all
SELECT 12,  12 , 5 ,'12.01.2017' 
)
SELECT * from Table1a A
WHERE NOT EXISTS (SELECT 1 From Table1b B WHERE B.CLIENT=A.CLIENT)

答案 1 :(得分:0)

您是否正在寻找以下内容:

select * from table_1  --Better to provide exact column list in sequence
except
select * from table1a  --Follow the same sequence here as well

输出如下:

+----+-----+--------+--------------+
| id | bv  | client | booking_date |
+----+-----+--------+--------------+
|  6 |   3 |      3 | 2017-01-06   |
|  7 |  19 |      4 | 2017-01-07   |
|  8 | 523 |      5 | 2017-01-08   |
|  9 |  23 |      4 | 2017-01-09   |
| 10 |  12 |      5 | 2017-01-10   |
| 11 |  51 |      4 | 2017-01-11   |
| 12 |  12 |      5 | 2017-01-12   |
+----+-----+--------+--------------+