Вы не можете запустить Http.sys в Linux, это вариант размещения только для Windows. См. документацию .
Http.sys тесно связан с Windows (и IIS, который является веб-сервером Microsoft).
Для Linux вы должны использовать Kestrel.
Для получения деталей примечаний, которые имеют и маркируют 'One' и 'Two':
select * from notes
where note_id in
( select note_id from labels where label = 'One'
intersect
select note_id from labels where label = 'Two'
)
Что-то вроде этого... (Вам будет нужна другая таблица ссылки),
SELECT *
FROM Notes n INNER JOIN NoteLabels nl
ON n.noteId = nl.noteId
WHERE nl.labelId in (1, 2)
Править: таблица NoteLabel будет иметь два столбца, noteId и маркированный, с составным PK.
Если Вам просто нужен список, можно использовать where exists
избегать дублирования. Если у Вас будет несколько тегов против узла в Ваших критериях выбора, то Вы получите дублирующиеся строки в результате. Вот пример where exists
:
create table notes (
NoteID int not null primary key
,NoteText varchar (max)
)
go
create table tags (
TagID int not null primary key
,TagText varchar (100)
)
go
create table note_tag (
NoteID int not null
,TagID int not null
)
go
alter table note_tag
add constraint PK_NoteTag
primary key clustered (TagID, NoteID)
go
insert notes values (1, 'Note A')
insert notes values (2, 'Note B')
insert notes values (3, 'Note C')
insert tags values (1, 'Tag1')
insert tags values (2, 'Tag2')
insert tags values (3, 'Tag3')
insert note_tag values (1, 1) -- Note A, Tag1
insert note_tag values (1, 2) -- Note A, Tag2
insert note_tag values (2, 2) -- Note B, Tag2
insert note_tag values (3, 1) -- Note C, Tag1
insert note_tag values (3, 3) -- Note C, Tag3
go
select n.NoteID
,n.NoteText
from notes n
where exists
(select 1
from note_tag nt
join tags t
on t.TagID = nt.TagID
where n.NoteID = nt.NoteID
and t.TagText in ('Tag1', 'Tag3'))
NoteID NoteText
----------- ----------------
1 Note A
3 Note C
Примечание: Я на самом деле не протестировал это. Это также предполагает, что у Вас есть many-many таблица, названная notes_labels, который не может иметь место вообще.
Если Вы просто хотите примечания, которые, имея любую из маркировок, это, что-то вроде этого
SELECT DISTINCT n.id, n.text
FROM notes n
INNER JOIN notes_labels nl ON n.id = nl.note_id
INNER JOIN labels l ON nl.label_id = l.id
WHERE l.label IN (?, ?)
Если Вы хотите примечания, которые имеют ВСЕ маркировки, существует немного дополнительной работы
SELECT n.id, n.text
FROM notes n
INNER JOIN notes_labels nl ON n.id = nl.note_id
INNER JOIN labels l ON nl.label_id = l.id
WHERE l.label IN (?, ?)
GROUP BY n.id, n.text
HAVING COUNT(*) = 2;
? быть заполнителем SQL и 2 являющийся количеством тегов Вы искали. Это предполагает, что таблица ссылки имеет оба столбца ID как составной первичный ключ.
select * from notes a
inner join notes_labels mm on (mm.note = a.id and mm.labeltext in ('one', 'two') )
Конечно, замените своими фактическими именами столбцов, надо надеяться, мои предположения о Вашей таблице были корректны.
И на самом деле существует немного возможной неоднозначности в Вашем вопросе благодаря английскому языку и как слово 'и' иногда используется. Если Вы подразумеваете, что хотите видеть, например, примечание отметило 'один', но не 'два', это должно работать (интерпретация Ваш 'и' означать, 'покажите меня все примечания с маркировкой 'один' и/плюс все примечания с маркировкой 'два'). Однако, если Вы только хотите примечания, которые имеют обе маркировки, это было бы одним способом пойти об этом:
select * from notes a
where exists (select 1 from notes_labels b where b.note = a.id and b.labeltext = 'one')
and exists (select 1 from notes_labels c where c.note = a.id and c.labeltext = 'two')
Править: спасибо за предложения все, механизмы в понедельник в моем мозгу являются немного медленными... похож, у меня должен быть wiki'd он!
Принятие Вас имеет нормализованную базу данных, у Вас должна быть другая промежуточная таблица notes
и labels
Необходимо затем использовать inner join
присоединиться к таблицам вместе
labels
таблица со связывать-таблицей (many-many таблица)notes
таблица с предыдущим запросомПример:
select * from ((labels l inner join labels_notes ln on l.labelid = ln.labelid) inner join notes n on ln.notesid = n.noteid)
Тем путем Вы соединили обе таблицы вместе.
Теперь то, что необходимо добавить, where
пункт..., но я оставлю это до Вас.
Вы ничего не говорите о том, как эти many-many отношения поняты. Я предполагаю, что таблица маркировок имеет, Маркировки (noteid: интервал, маркировка: varchar) - с первичным ключом, охватывающим обоих?
SELECT DISTINCT n.id from notes as n, notes_labels as nl WHERE n.id = nl.noteid AND nl.text in (label1, label2);
Замените своими именами столбцов и вставьте надлежащих заполнителей для маркировок.