【问题标题】:Laravel inner join on two queriesLaravel 内部连接两个查询
【发布时间】:2014-09-27 18:38:40
【问题描述】:

我有一个查询,我要加入两个查询以获得我想要的,我可以在 SQL 中很好地管理它,但是我现在完全不知道如何为 Laravel 编写这个。这是 SQL:

select *
from 
    (
        select stu.s_nid as student_nid, stu.name as student_name, vote.id as vote_id
        from student stu
        left join vote on vote.student_id = stu.id
        where vote.vote_no != 0
    ) as q1
    inner join 
    (
        select stu.s_nid as nominee_nid, stu.name as nominee_name, vnd.nominee_type_id, vnd.vote_id, nt.name_ar
        from vote_nominee_details vnd
        left join nominee nom
        on nom.id = vnd.nominee_id
        left join student stu
        on stu.id = nom.student_id
        left join vote
        on vote.id = vnd.vote_id
        left join nominee_type nt
            on nt.id = vnd.nominee_type_id
        where vnd.vote_id is not null
        and vote.vote_no != 0
    ) as q2 on q1.vote_id = q2.vote_id

任何帮助将不胜感激

【问题讨论】:

    标签: php mysql laravel laravel-4


    【解决方案1】:

    试试这个

    $result = DB::select($sql);
    

    你也可以试试这个

    DB::table(DB::raw('(select stu.s_nid as student_nid, stu.name as student_name, vote.id as vote_id
            from student stu left join vote on vote.student_id = stu.id
            where vote.vote_no != 0) as q1'))
    ->join(DB::raw('(select stu.s_nid as nominee_nid, stu.name as nominee_name, vnd.nominee_type_id, vnd.vote_id, nt.name_ar from vote_nominee_details vnd 
            left join nominee nom on nom.id = vnd.nominee_id
            left join student stu on stu.id = nom.student_id
            left join vote on vote.id = vnd.vote_id
            left join nominee_type nt on nt.id = vnd.nominee_type_id
            where vnd.vote_id is not null and vote.vote_no != 0) as q2'), 'q2.vote_id', '=', 'q1.vote_id')
    ->get();
    

    【讨论】:

    • 第一个解决方案效果很好,非常感谢!第二个产生了一个我不明白的错误: SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'as' (SQL: select * from (select as as inner join @987654325 @ as as q2.vote_id = q1.vote_id)
    • 老板!非常感谢您的帮助,可以确认两种解决方案都有效,我最终使用了第二种解决方案 - 不确定其中一种是否优于另一种?
    • 它们是一样的,没有区别。你可以给我投票,谢谢。
    • 对不起,先生,我认为接受答案就足够了。你被点赞了! :)
    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2020-03-25
    • 2017-06-06
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多