- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
select top 1 v.Id
from dbo.Verification v
where v.ApplicationId = a.Id
and v.ResultId = 'D69E0B3A-C5CA-42D0-A8CA-FA7FF63BC414'
and not exists (
select 1 from Verification vo
where vo.ApplicationId = v.ApplicationId
and vo.ResultId = v.ResultId
and vo.Id != v.Id
and vo.Position > v.Position
)
guest 21.10.2014 19:51 # −7
Нераздобанная жопа?
guest 21.10.2014 19:55 # −6
guest 21.10.2014 19:55 # −7
guest 21.10.2014 19:56 # −6
JuiceRU 22.10.2014 12:05 # −1
if object_id('tempdb..#tabl') is not null drop table #table
create table #table
(A varchar(20),
B int)
insert into #table (A,B)
VALUES ('Паша', 5);
insert into #table (A,B)
VALUES ('Cаша', 5);
insert into #table (A,B)
VALUES ('Даша', 5);
insert into #table (A,B)
VALUES ('Маша', 5);
select top 1 A from #table
ORDER BY B DESC
select top 1 t.A from #table as t
WHERE not exists (
select top 1 t1.A from #table as t1
WHERE t1.B > t.B
)
У меня вывелось (проверял на 2003-ем):
Саша
Паша
В чем прикол?
inkanus-gray 22.10.2014 12:10 # −1
А в первом случае СУБД сначала сортирует всю таблицу. Я догадываюсь, что сортировать массив одинаковых значений не полезнее, чем носить воду в решете, но тупая машина может этого не знать и перемешать таблицу. Потому и выводит не первую строку, а случайную.
JuiceRU 22.10.2014 12:29 # −1
И еще одна фигня, при top 4 он как раз вывел таблицу в обратном порядке
bormand 22.10.2014 12:42 # +1
> при top 4 он как раз вывел таблицу в обратном порядке
Если нет order by - СУБД имеет полное право вывести записи в любом порядке. К сожалению, зачастую, она выводит их в порядке вставки, и люди считают, что order by лишний.
bormand 22.10.2014 12:53 # 0
Так что либо добавляй еще колонок в order, либо получай недетерминированный выхлоп.
DBdev 22.10.2014 16:30 # −1
простите, совпали с чем?
DBdev 22.10.2014 16:51 # −1
bormand 22.10.2014 18:10 # −1
Я криво выразился, наверное... Примерно так: Все пятёрки гарантированно идут после четверок. Но вот порядок записей среди этой группы пятёрок не определен, если еще чего-нибудь не добавить в order. Вот это я имел в виду.
Lokich 23.10.2014 03:21 # −1
bormand 23.10.2014 05:26 # −1
Если СУБД в него умеет и его создали...
> многое зависит от плана запроса
Ну вот и я о том же. Нет ордера - никаких гарантий.
inkanus-gray 22.10.2014 13:20 # −1
defecate-plusplus 22.10.2014 13:37 # +1
иначе ни ACID, ни роллбек не сделать
Lokich 23.10.2014 03:29 # −1
defecate-plusplus 23.10.2014 08:00 # −1
т.к. тебе так или иначе необходимо знать физический адрес записи - в каком файле/блоке/по какому смещению он лежит - хотя бы для того, чтобы нормальный индекс строить
судя по http://stackoverflow.com/a/7538103, mssql тупо не даёт штатного документированного механизма получить это значение пользователю, а что даёт - затем не использует преимущество прямого обращения по заданному адресу (а ведь это самый быстрый способ достать строку из бд)
kipar 22.10.2014 12:11 # −1
DBdev 22.10.2014 16:34 # −1
defecate-plusplus 22.10.2014 16:56 # 0
Vasiliy 22.10.2014 17:27 # −1
inkanus-gray 22.10.2014 17:46 # −1
Vasiliy 22.10.2014 18:11 # +1
inkanus-gray 22.10.2014 19:13 # −1
Vasiliy 22.10.2014 19:16 # 0
inkanus-gray 22.10.2014 19:20 # −1
Vasiliy 22.10.2014 19:49 # −1
bormand 22.10.2014 19:52 # 0
Оракл, M$$QL, постгрес и мускуль - не СУБД. Ок.
Vasiliy 22.10.2014 20:14 # −1
bormand 22.10.2014 19:27 # +1
> проблема с доступом из нескольких процессов
> тормозные коммиты
Это, имхо, судьба любой СУБД на основе расшаренного файла.
Lokich 23.10.2014 03:41 # −1
Но у access, кстати говоря есть возможность настроить синхронизацию через odbc с реальной таблицей, и человек, который более или менее вменяемый, сможет напрямую редактировать эти записи через gui, и даже вставлять их напрямую из excel, что удобно.
bormand 22.10.2014 18:14 # 0
http://ideone.com/Jly6kW
bormand 22.10.2014 18:22 # +1
bormand 22.10.2014 18:24 # 0
inkanus-gray 22.10.2014 19:15 # 0
bormand 22.10.2014 19:30 # 0
DBdev 22.10.2014 16:34 # −1
Access-е штолле?
anonimb84a2f6fd141 23.10.2014 19:00 # −4