2010-09-23 1 views
0

Параметры таковы:SQL: Нужна помощь в создании один-ко-многим Set сравнения запрос

  1. У меня есть таблица под названием задач с помощью столбцов ID (первичный ключ) и этикетки (текст).
  2. У меня есть другая таблица, называемая местоположениями с внешним ключом, ссылающаяся на идентификатор задач и имя для местоположения (текста).
  3. В моем коде у меня есть набор мест.
  4. ОБНОВЛЕНО: Мне нужен запрос, чтобы возвращать все задачи, имеющие связанные местоположения, найденные в моем наборе. Каждая задача, у которой есть связанное местоположение, не найденное в моем наборе, должно быть выбрано.

Каков наилучший способ сделать это?

+0

Вы спрашиваете, как передать набор (а.к.а. таблицы) от вас клиентского приложения на ваш SQL СУБД? Существует много подходов к этой проблеме (несколько скалярных параметров, строка с разделителями, XML и т. Д.) И во многом зависит от рассматриваемого продукта SQL. Вы найдете много вопросов о SO об этом :) – onedaywhen

+0

Нет, мне просто нужна была небольшая помощь в логике запроса. – Hamster

ответ

0

Для модифицированного требования:

select * from tasks t 
where exists (select null from locations l 
       where t.id = l.task_id and l.name in ('London', 'Geneva'...)) and 
    not exists (select null from locations l 
       where t.id = l.task_id and l.name not in ('London', 'Geneva'...)) 
+0

Я думаю это может сработать. Мне также раньше удалось найти: SELECT * FROM Tasks WHERE id NOT IN (SELECT UNIQUE L.taskid FROM Locations L WHERE L.val NOT IN («Лондон», «Женева», ...)); Хотя я не уверен, что моя правда. – Hamster