Правильная техника для объединения таблиц? - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь получить значение NUMSESSION из таблицы members_benefit.У моей функции есть идентификатор преимущества и идентификатор членства в качестве параметров, и для members_benefit нужны оба эти значения, в противном случае будет возвращено несколько строк.

Вот суть функции

`CREATE OR REPLACE FUNCTION benefit_when(_benefitid integer, _membershipid 
 integer) RETURNS text AS $$
 DECLARE
     bfrec record;
 BEGIN
     if _membershipid is not null then
         select 
             benefit.*,
             membership_benefit.numsession as numsession
         from benefit 
             left join membershiptype on benefit.membershiptypeid=membershiptype.id
             left join membership_benefit on _membershipid = membership_benefit.membershipid
         where benefit.id=_benefitid
             AND (membership_benefit.membershipid is null or membership_benefit.membershipid = _membershipid);`

numsessionзначение не возвращается правильно.Если я печатаю значение двух параметров и просто запрашиваю БД, он возвращает правильный, но не в этой функции.Вам разрешено использовать переменную для присоединения, как я здесь, и если нет, то есть ли лучший способ получить искомое число с двумя имеющимися у меня параметрами?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Если вы просто хотите numsession, я не уверен, почему вы делаете внешнее соединение.Это то, что вы действительно хотите?

select mb.numsession
from membership_benefit mb
where mb.membershipid = _membershipid and
      mb.benefitid = _benefitid;

Если вы всегда хотите строку для пособия, вместе с этой информацией:

select b.*, mb.numsession as numsession
from benefit b join
     membership_benefit mb
     on mb.benefitid = b.id and
        mb.membershipid = _membershipid and
        b.id =_benefitid
where b.id = _benefitid;

Я полагаю, что вы хотите одну из этих двух вещей.

0 голосов
/ 24 октября 2018

измените ваш запрос:

select 
         benefit.*,
         membership_benefit.numsession as numsession
     from benefit 
         left join membershiptype on benefit.membershiptypeid=membershiptype.id
         left join membership_benefit on _membershipid = membership_benefit.membershipid
     where benefit.id=_benefitid

на это:
select benefit.*, membership_benefit.numsession as numsession from benefit left join membershiptype on benefit.membershiptypeid=membershiptype.id where benefit.id=_benefitid and _membershipid = membership_benefit.membershipid

...