SQL-запрос для исключения записей, если это соответствует записи в другой таблице (такой как праздничные даты)

Я советую вам прочитать о CORS в целом: https://developer.mozilla.org/de/docs/Web/HTTP/CORS

Чтобы решить вашу проблему, вы необходимо настроить ваш веб-сервер, чтобы разрешить этот источник, например, с помощью этого промежуточного программного обеспечения: https://github.com/barryvdh/laravel-cors

См. раздел «Конфигурация» документов, касающихся allowedOrigins.

С наилучшими пожеланиями

8
задан Tunaki 28 August 2015 в 13:12
поделиться

5 ответов

Следующий запрос должен получить Вас список приложений, которым НЕ определили праздник для ТЕКУЩЕЙ ДАТЫ.

SELECT apps.ApplicationName, apps.isavailable 
FROM dbo.Applications apps
WHERE apps.ApplicationName = @AppName
    AND NOT EXISTS 
( SELECT * 
  FROM Holidays 
  WHERE ApplicationId = apps.ApplicationId
     AND CONVERT(VARCHAR,getdate(),101) = CONVERT(VARCHAR,holidaydate,101)
)

В основном то, что мы делаем, выбрать все, где это не имеет соответствия.

16
ответ дан 5 December 2019 в 05:46
поделиться

Можно использовать, "ГДЕ НЕ СУЩЕСТВУЕТ":

SELECT *
FROM Applications a
WHERE NOT EXISTS (
    SELECT * 
    FROM Holidays h
    WHERE h.ApplicationID = a.ApplicationID
        AND HolidayDate = cast(cast(getdate() as int) as datetime)
)

Я делаю, бросок там для усечения getdate () перезванивают на просто дату. Не протестировали тот точный запрос, но я думаю, что он сделает задание для Вас.

4
ответ дан 5 December 2019 в 05:46
поделиться
SELECT a.isAvailable
  FROM Application a
 WHERE NOT EXISTS (
    SELECT TOP 1 0
      FROM Holidays b
     WHERE a.applicationid = b.applicationid
       AND holidaydate = $today
 )
2
ответ дан 5 December 2019 в 05:46
поделиться

Хорошо, только чтобы отличаться, как насчет чего-то вроде этого:

select apps.isavailable
from dbo.Application apps left outer join dbo.Holidays hol
    on apps.applicationid = hol.applicationid
    and convert(varchar(10),getdate(),101) = convert(varchar(10),hol.holidaydate,101)
where apps.applicationname = @appname
    and hol.applicationid is null

В основном Вы присоединяетесь к таблицам на основе applicationid и текущей даты. Так как это - левое соединение, Вы будете всегда получать все приложения, которые соответствуют @appname, затем Вы просто отфильтровываете любые результаты, которые получают соответствие на основе праздничной даты, являющейся текущей датой. Предполагая, что applicationname уникален, Вы будете всегда получать одну строку, где правильная половина соединения является пустой, если текущая дата не будет соответствовать празднику, в этом случае запрос не возвратит результатов.

Я не знаю, как это складывает с другими мудрыми производительностью решениями; я полагаю, что соединения, как обычно предполагается, быстрее, чем подзапросы, но это, вероятно, зависит от множества факторов, таким образом, YMMV.

5
ответ дан 5 December 2019 в 05:46
поделиться

Сделайте что-то вроде этого:

SELECT (fields) FROM Application
WHERE NOT EXISTS
  (SELECT * FROM Holidays
   WHERE ApplicationID = Application.ApplicationID
   AND DAY(getdate()) = DAY(holidaydate) 
   AND MONTH(getdate()) = MONTH(holidaydate)
   AND YEAR(getdate()) = YEAR(holidaydate)
  )

Конечно, это было бы намного легче и быстрее с типом данных "ДАТЫ" 2008 SQL Server, или если Вы могли бы сохранить день, месяц, год в "Праздниках" отдельно.

Marc

2
ответ дан 5 December 2019 в 05:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: