Что такое спецификация внутреннего соединения для SQL :: Abstract :: More, когда у вас есть вызов функции - PullRequest
0 голосов
/ 05 июня 2019

Мне нужно преобразовать SQL, который использует внутреннее соединение, которое преобразует данные, используя IFNULL и FROM_UNIXTIMESTAMP вызовы функций MySQL, но документация cpan содержит только простые примеры, которые бесполезны.

Я не смог придумать ничего, что понимает модуль.

Это SQL:

select d.account,d.invoice,d.company, d.note
from invoice i
join invoice d
on i.account = d.account
and ifnull(i.external_invoice,0) = ifnull(d.external_invoice,0)
and from_unixtime(i.invoice_date,'%Y-%m-%d') = from_unixtime(d.invoice_date,'%Y-%m-%d')
and d.invoice > i.invoice

Ниже я представляю, как это будет выглядеть

my ($sql,@bind) = SQL::Abstract::More->new->select(
        -columns => [qw/d.account d.invoice d.company d.note/],
        -from    => [
                       -join => qw/invoice|i
                                   <=> {
                                    i.account=d.account,

                ifnull(i.external_invoice,0)=ifnull(d.external_invoice,0),
from_unixtime(i.invoice_date,'%Y-%m-%d')=from_unixtime(d.invoice_date,'%Y-%m-%d'),
d.invoice>i.invoice

                                   }
                                   invoice|d
                                  /

        ],

Я ожидаю генерации SQL, с которого я начал:

select d.account,d.invoice,d.company, d.note
from invoice i
join invoice d
on i.account = d.account
and ifnull(i.external_invoice,0) = ifnull(d.external_invoice,0)
and from_unixtime(i.invoice_date,'%Y-%m-%d') = from_unixtime(d.invoice_date,'%Y-%m-%d')
and d.invoice > i.invoice
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...