ОШИБКА: более одной строки, возвращенной подзапросом, используемым в качестве выражения. POSTGRESQL / LOOKER - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь выполнить подзапрос в Looker, который возвращает имя уполномоченного из таблицы лиц, где идентификатор человека равен назначенному идентификатору пользователя

Я пытался установить предел 1, но он просто возвращает первое значение для человека в каждой строке

SELECT 
    "ID",

    (SELECT 
        p."NAME"
    FROM 
        view_321782990.person AS p, view_321782990.request AS r 
    WHERE 
        p."ID" = r."ASSIGNEDTOPERSON") 
FROM view_321782990.request

Я хочу вернуть Имя того, кто был назначен на билет, делая

SELECT 
        p."NAME", r."ID"
    FROM 
        view_321782990.person AS p, view_321782990.request AS r 
    WHERE 
        p."ID" = r."ASSIGNEDTOPERSON"

возвращает то, что я хочу, однако мне нужно сделать подзапрос таким образом, потому что looker интерпретирует SQL

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

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

SELECT 
    "ID",

    (SELECT 
        p."NAME"
    FROM 
        view_321782990.person AS p, view_321782990.request AS r 
    WHERE 
        p."ID" = r."ASSIGNEDTOPERSON" AND r."ID" = outer_r."ID"
    LIMIT 1
) 
FROM view_321782990.request AS outer_r

Где request."ID" - это путьотличия от записи с p."ID" = r."ASSIGNEDTOPERSON" Этот метод зависит от взаимосвязи между этими таблицами и может быть невозможным во всех ситуациях, что приводит меня к следующему:

Я согласен с общим мнением, что это может быть легче сделатьв соединении.Вам может понадобиться добавить объединение в исследование, если его там нет, но как только объединение между представлениями, вы можете получить доступ к полям разных представлений, например, так:

view: request {
  # ... sql_table_name, etc ...
  dimension: person_name {
    sql: ${person.name}
  }
  # ... mode dimensions, measures, etc ...
}

Если у вас есть четкое представлениео том, как должен выглядеть сгенерированный sql, я бы подробнее посмотрел на , как looker генерирует sql , а здесь - на , как обрабатываются объединения

0 голосов
/ 29 мая 2019

Использовать объединение:

SELECT
  p.name
  , r.id
FROM view_321782990.person p
LEFT JOIN view_321782990.request r ON
  p.id = r.assignedtoperson
...