@Nulltiton

Как следует изменить запрос чтобы при выборке всех записей подзапрос возвращал по одному значению для каждого кортежа?

У меня есть запрос, который отлично работает при условии, что в таблице есть только одна запись:

SELECT Waybill.Id
, Waybill.IMO
, Vessel.Name
, Waybill.loginManager
, User.Name
, Waybill.loginStorekeeper
, (SELECT DISTINCT(Name) FROM User, Waybill WHERE (Waybill.loginStorekeeper = User.login)) AS storekeeperName
, Waybill.Date 
FROM Waybill, Vessel, User 
WHERE Waybill.IMO = Vessel.IMO
AND Waybill.loginManager = User.Login
AND Waybill.loginManager = User.Login
ORDER BY Waybill.Id


Однако если записей больше, чем одна, то подзапрос возвращает несколько значений, из-за чего появляется ошибка. Подскажите, пожалуйста, как исправить запрос?

Заранее большое спасибо.
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
erge
@erge
Примус починяю
Подзапрос который вставляется в список колонок должен возрващать только ОДНУ строку.
либо перепишите подзапрос, чтобы он в любом случае возвращал только одну строку, либо джойните его или таблицу.
Кроме того этот подзапрос никак не привязан к таблицам выборки ?? так и задуманно?

какая вообще связь между таблицами, что это за таблицы? какой должен быть результат выборки?

Вангую, что должно быть примерно так:

SELECT
     w.Id
    ,w.IMO
    ,v.Name
    ,w.loginManager
    ,um.Name AS managerName
    ,w.loginStorekeeper
    ,umk.Name AS storekeeperName
    ,w.Date 
  FROM Waybill w
  INNER JOIN Vessel v ON w.IMO = v.IMO
  INNER JOIN User um  ON w.loginManager = um.Login
  INNER JOIN User umk ON w.loginStorekeeper = umk.Login
  ORDER BY w.Id
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы