У меня есть две таблицы: одна ORDERS
, а другая ORDERITEM
Таблица ORDERS
выглядит следующим образом:
ORDERNO
ORDERDATE
ORDERREADYDATE
CUSTOMERNO
Таблица ORDERITEMS
выглядит следующим образом:
ORDERNO
ORDERDATE
QTY
ITEMNO
У меня есть запись заказа:
12335
11/04/2018
11/06/2018
9999999
12336
11/04/2018
11/06/2018
9999998
12337
11/04/2018
11/06/2018
9999997
12345
11/05/2018
11/07/2018
9999999
12346
11/05/2018
11/07/2018
9999998
12347
11/05/2018
11/07/2018
9999997
И элементы заказа:
12335
11/04/2018
5
678
12335.1
11/04/2018
11
587
12335.2
11/04/2018
3
554
12336
11/04/2018
5
678
12336.1
11/04/2018
11
587
12336.2
11/04/2018
3
554
12345
11/05/2018
5
678
12345.1
11/05/2018
11
587
12345.2
11/05/2018
3
554
12346
11/05/2018
5
678
12346.1
11/05/2018
11
587
12346.2
11/05/2018
3
554
В готовую дату я хотел бы найти все пункты, которые не имеют точки в счете.
Я пробовал это, но он дает мне старые заказы:
SELECT
i.orderno,
i.orderdate,
d.orderno,
d.orderdate,
d.itemno
FROM
ORDERS i,
ORDERITEM d
WHERE
i.ORDERREADYDATE = '2018-11-07'
AND d.orderdate = i.orderdate
AND d.orderno NOT LIKE '%.%'
Вот код для воспроизведения проблемы:
TRY DROP TABLE #ORDERS; CATCH ALL END TRY;
TRY DROP TABLE #ORDERITEM; CATCH ALL END TRY;
CREATE TABLE
#ORDERS
(
ORDERNO NVARCHAR(10),
ORDERDATE DATE,
ORDERREADYDATE DATE,
CUSTOMERNO INTEGER
);
CREATE TABLE
#ORDERITEM
(
ORDERNO NVARCHAR(10),
ORDERDATE DATE,
QTY INTEGER,
ITEMNO INTEGER,
);
INSERT INTO
#ORDERS
SELECT
'12335',
'2018-11-04',
'2018-11-06',
9999999
FROM system.iota
UNION SELECT
'12336',
'2018-11-04',
'2018-11-06',
9999998
FROM system.iota
UNION SELECT
'12337',
'2018-11-04',
'2018-11-06',
9999997
FROM system.iota
UNION SELECT
'12345',
'2018-11-05',
'2018-11-07',
9999999
FROM system.iota
UNION SELECT
'12346',
'2018-11-05',
'2018-11-07',
9999998
FROM system.iota
UNION SELECT
'12347',
'2018-11-05',
'2018-11-07',
9999997
FROM system.iota;
INSERT INTO
#ORDERITEM
SELECT
'12335',
'2018-11-04',
5,
678
FROM system.iota
UNION SELECT
'12335.1',
'2018-11-04',
11,
587
FROM system.iota
UNION SELECT
'12335.2',
'2018-11-04',
3,
554
FROM system.iota
UNION SELECT
'12336',
'2018-11-04',
5,
678
FROM system.iota
UNION SELECT
'12336.1',
'2018-11-04',
11,
587
FROM system.iota
UNION SELECT
'12336.2',
'2018-11-04',
3,
554
FROM system.iota
UNION SELECT
'12345',
'2018-11-05',
5,
678
FROM system.iota
UNION SELECT
'12345.1',
'2018-11-05',
11,
587
FROM system.iota
UNION SELECT
'12345.2',
'2018-11-05',
3,
554
FROM system.iota
UNION SELECT
'12346',
'2018-11-05',
5,
678
FROM system.iota
UNION SELECT
'12346.1',
'2018-11-05',
11,
587
FROM system.iota
UNION SELECT
'12346.2',
'2018-11-05',
3,
554
FROM system.iota
;
SELECT
i.orderno,
i.orderdate,
d.orderno,
d.orderdate,
d.itemno
FROM
#ORDERS i,
#ORDERITEM d
WHERE
i.ORDERREADYDATE = '2018-11-07'
AND d.orderdate = i.orderdate
AND d.orderno NOT LIKE '%.%'
;
Этот SQL работает вечно, если я удаляю d.orderno, НЕ КАК "%.%", Он завершается, но я получаю те же 20 повторяющихся i.orderno с diffrent d.orderno.
Таблица ORDERITEM насчитывает более 7 миллионов записей, растущих с 10K каждый день.
Спасибо за любую помощь.