Вот очень упрощенная версия моих данных SQLite:
CREATE Table Questionnaires
(
questionnaire_id INTEGER NOT NULL,
seconds INTEGER NOT NULL,
measure CHAR(4) NOT NULL,
score INTEGER NOT NULL,
PRIMARY KEY (questionnaire_id)
)
INSERT INTO Questionnaires (seconds, measure, score) VALUES (5, 'PHQ9', 10), (5, 'GAD7', 8), (20, 'PHQ9', 5)
CREATE Table Events
(
event_id INTEGER NOT NULL,
seconds INTEGER NOT NULL,
PRIMARY KEY (event_id)
)
INSERT INTO Events (seconds) VALUES (5), (5), (10), (15), (20)
Я хотел бы объединить две таблицы на seconds
. Моя текущая попытка не дает желаемого результата:
SELECT
Events.event_id,
Questionnaires.questionnaire_id,
Questionnaires.seconds,
Questionnaires.measure,
Questionnaires.score
FROM Questionnaires
LEFT OUTER JOIN Events
ON Events.seconds = Questionnaires.seconds
Есть две анкеты на seconds == 5
и два события на seconds == 5
, поэтому LEFT OUTER JOIN
дает мне четыре результирующих строки, то есть
- анкета 1 объединяется с событием 1,
- анкета 1 соединяется с событием 2,
- анкета 2 соединяется с событием 1, а
- анкета 2 присоединяется с событием 2.
Но я хочу либо
- вопросник 1, объединенный с событием 1, и вопросник 2, соединенный с событием 2, либо
- вопросник 1 присоединился к событию 2, а вопросник 2 - к событию 1.
Я не против, какое из них я получу.
Я вижу, как это сделать на процедурном языке, но Я не могу понять, как это сделать в SQL теорией множеств c.
Любые идеи?
(NB В моем реальном наборе данных повторяющиеся события совпадения редки, вот почему я не заметил мою глупую ошибку.)