Запрос нескольких таблиц с неправильными строками

Я хочу получить запрос из двух таблиц, но результирующий запрос содержит больше строк, чем должно быть.

Мое утверждение:

 SELECT *  FROM deal D, item I  WHERE D.dealstate = 'ACCEPTED' AND 
     ((D.owner = 'UserName1') OR 
      (D.itemID = I.itemID AND I.owner = 'UserName1')) AND 
       D.deadline < NOW()

С помощью этого утверждения я хочу получить активные сделки пользователя. Таблица сделок имеет owner (the requester), dealID, itemID, creationdate, dealstate, deadline, explanation, а таблица товаров имеет owner (the owner of item), itemID, itemname, description.

Проблема в том, что я хочу запрос с одним результатом. Потому что «UserName1» имеет только 1 сделку. Однако я получаю запрос с 10 строками, каждый из которых соответствует сделке. Я думал использовать «JOIN», но если пользователь не является владельцем элемента, эта таблица ITEM не будет использоваться. Тогда что мне делать?

Надеюсь, я достаточно ясно выразился.


person anyName    schedule 02.06.2014    source источник


Ответы (1)


Ваш запрос неправильно объединяет две таблицы, потому что D.itemID = I.itemID не всегда верно в том, что вы написали. Попробуйте что-то вроде

SELECT * FROM deal D, item I WHERE D.dealstate = 'ACCEPTED' AND D.itemID = I.itemID AND ((D.owner = 'UserName1') OR ( I.owner = 'UserName1')) AND D.deadline < NOW();
person Kabulan0lak    schedule 02.06.2014