У меня есть две таблицы, Event
и EventTag
SQL: Найти записи с соответствующими критериями в другой таблице
CREATE TABLE event (
id INT PRIMARY KEY,
content TEXT
)
CREATE TABLE event_tag (
event_id INT,
type VARCHAR(255),
value VARCHAR(255)
)
Каждое событие имеет ноль или более меток. Запрос Я хотел бы выразить в SQL является:
Дайте мне все
Event
(все столбцы таблицы), которые связаны с тегиEventTag.type="foo" and EventTag.value="bar"
.
Это легко один критерий тега (например, с присоединиться и где, как ответил here), но как я могу решить ситуацию двух или более критериев? Итак: Дайте мне события со связанным тегом «foo» равным «bar» и (!) Тегу события «qux», равному «quux»? Я думал о присоединении к таблице тегов «n» раз, но я не уверен, что это хорошая идея.
Какие СУБД вы используете? –
Я использую H2 для тестирования и Postgres 9.1 в производстве. –
Взгляните на [реляционное подразделение] (https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/), ака " поставщик, который поставляет все детали ». SQL/postrgre не имеет оператора 'divide', вы должны подделывать его с другими операторами, не обязательно, как предлагает @TomH (но это хороший старт). – onedaywhen