Как я могу протестировать, если список файлов существует?

Вы можете получить самый ранний заказ через лимит и упорядочить по дате.
Затем вы можете оставить соединение, чтобы получить этот заказ и любой другой заказ, который по крайней мере имеет те же предметы.

Затем, получив эти идентификаторы заказа из результата подзапроса, вы можете получить детали заказа.

SELECT o.*
FROM
(
  SELECT DISTINCT ord2.ID as OrderId
  FROM 
  (
     SELECT ID, CustomerId, Status
     FROM OrdersTable
     WHERE Status = 0
     ORDER BY created_at
     LIMIT 1
  ) AS ord1
  JOIN PurchasedProductsTable AS pprod1
    ON pprod1.OrderId = ord1.ID
  LEFT JOIN OrdersTable ord2
    ON ord2.CustomerId = ord1.CustomerId
   AND ord2.Status = ord1.Status
  LEFT JOIN PurchasedProductsTable pprod2
    ON pprod2.OrderId = ord2.ID
   AND pprod2.itemSku = pprod1.itemSku
   AND pprod2.Qty = pprod1.Qty
  GROUP BY ord1.CustomerId, ord1.ID, ord2.ID
  HAVING COUNT(pprod1.itemSku) = COUNT(pprod2.itemSku)
) q
JOIN OrdersTable AS o ON o.ID = q.OrderId;

Тест на RexTester здесь

7
задан Justin Voss 29 September 2008 в 21:40
поделиться

6 ответов

В cmd.exe, ДЛЯ/F %variable В (имени файла) ДЕЙСТВИТЕЛЬНО управляют, должен дать Вам, что Вы хотите. Это читает содержание имени файла (и они могли быть больше чем одними именами файлов) одна строка за один раз, поместив строку в %variable (более или менее; сделайте СПРАВКУ ДЛЯ в командной строке). Если никто больше не предоставит командный сценарий, то я попытаюсь.

Править: моя попытка для сценария cmd.exe, который делает требуемый:

@echo off
rem first arg is the file containing filenames
rem second arg is the target directory

FOR /F %%f IN (%1) DO IF EXIST %2\%%f ECHO %%f exists in %2

Отметьте, сценарий выше должен быть сценарием; ДЛЯ цикла в .cmd или .bat файле, по некоторой странной причине, должен иметь двойные знаки процента перед ее переменной.

Теперь, для сценария, который работает с bash|ash|dash|sh|ksh:

filename="${1:-please specify filename containing filenames}"
directory="${2:-please specify directory to check}
for fn in `cat "$filename"`
do
    [ -f "$directory"/"$fn" ] && echo "$fn" exists in "$directory"
done
9
ответ дан 6 December 2019 в 07:53
поделиться

Bash:

while read f; do 
    [ -f "$f" ] && echo "$f" exists
done < file.txt
9
ответ дан 6 December 2019 в 07:53
поделиться
for /f %i in (files.txt) do @if exist "%i" (@echo Present: %i) else (@echo Missing: %i)
2
ответ дан 6 December 2019 в 07:53
поделиться

В Windows:


type file.txt >NUL 2>NUL
if ERRORLEVEL 1 then echo "file doesn't exist"

(Это не может быть лучшим способом сделать это; это - способ, о котором я знаю; см. также http://blogs.msdn.com/oldnewthing/archive/2008/09/26/8965755.aspx),

В Bash:


if ( test -e file.txt ); then echo "file exists"; fi
1
ответ дан 6 December 2019 в 07:53
поделиться

Обратите внимание, однако, что использование файловых систем по умолчанию и под Win32 и под *отклоняет нет никакого способа гарантировать атомарность операции, т.е. если Вы проверяете на существование файлов A, B, и C, некоторый другой процесс или поток, возможно, удалили файл A после передачи его и в то время как Вы искали B и C.

Файловые системы, такие как Транзакционный NTFS могут преодолеть это ограничение.

1
ответ дан 6 December 2019 в 07:53
поделиться

Я хотел добавить один маленький комментарий к большинству вышеупомянутых решений. Они на самом деле не тестируют, если конкретный файл существует или нет. Они проверяют, чтобы видеть, существует ли файл, и у Вас есть доступ к нему. Для файла совершенно возможно существовать в каталоге, которому у Вас нет разрешения, в этом случае, Вы не сможете просмотреть файл даже при том, что это существует.

1
ответ дан 6 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

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