Идентификатор не должен отображаться между указанной датой? - PullRequest
0 голосов
/ 03 октября 2009

Использование SQL Server 2000

Database1.Table1

ID  Name Date       title    
001 Ravi 23-02-2009 Accountant
001 Ravi 24-02-2009 Accountant
001 Ravi 25-02-2009 Accountant
002 Ram  21-02-2009 Supervisors
002 Ram  25-02-2009 Supervisors
002 Ram  26-02-2009 Supervisors

Итак ...,

Database2.Table2

ID  Name Date1      Date2    
001 Ravi 23-02-2009 24-02-2009 
002 Ram  21-02-2009 24-02-2009

Так далее ...

Предположим, я хочу отобразить записи с 21-02-2009 по 26-02-2009 - Ожидаемый результат:

001 Ravi 25-02-2009 Accountant
002 Ram 25-02-2009 Supervisors
002 Ram 26-02-2009 Supervisors

Из приведенных выше двух таблиц я хочу отобразить идентификатор, имя, дату, заголовок из Database1.table1, где Database1.table1.id не должен отображаться между date1 и date2 из Database2.table2:

(23-02-2009 to 24-02-2009) ID should not display from table1
(21-02-2009 24-02-2009) ID should not display from table1

Как сделать запрос в SQL?

Может ли кто-нибудь мне помочь.

Ответы [ 3 ]

1 голос
/ 03 октября 2009

Для каждой строки в Таблице1 мы ищем строки в Таблице2 и показываем только строки без совпадения Таблицы2:

</p> <pre><code>SELECT TABLE1.* FROM TABLE1 LEFT JOIN TABLE2 ON (TABLE1.ID = TABLE2.ID) AND --JOIN TABLE2 BY ID (TABLE1.DATE BETWEEN TABLE2.DATE1 AND TABLE2.DATE2) --AND BY DATE CRITERIA WHERE (TABLE2.ID IS NULL) AND --SHOW ONLY IF IT DIDN'T MATCH ROW IN TABLE2 (TABLE1.DATE BETWEEN '21-02-2009' AND '26-02-2009')

1 голос
/ 03 октября 2009

Попробуйте:

SELECT t.id, 
       t.name, 
       t.date, 
       t.title
  FROM TABLE_1 t
 WHERE NOT EXIST(SELECT NULL
                   FROM TABLE_2 t2
                  WHERE t.date BETWEEN t2.date1 AND t2.date2)

Если ваша модель данных хранит даты в строках, обновите NOT EXISTS, чтобы использовать CAST / CONVERT, чтобы изменить их на DateTime ...

Помните, что LEFT JOIN / IS NULL не так эффективен, как NOT IN / NOT EXISTS в SQL Server .

0 голосов
/ 03 октября 2009

я думаю вы ищете это:

select db1.id, db1.name, db1.date, db1.title
from database1.table1 as db1
    join database2.table2 as db2 on db1.id = db2.id
where db1.date < db2.date1
    or db1.date > db2.date2

-don

...