如何将多个where子句联合或连接多个表?

时间:2017-06-20 04:39:34

标签: mysql sql laravel-5

我有两张桌子,一张是'会员'另一个是“储蓄”。会员表如下:

id|DomainName|DivisionName|ZoneName|MemberId|GeneralSaving
 1|  hem     | raj        | raj    |1111    |100
 2|  hem     | raj        | bog    |2222    |100
 3|  edu     | dha        | dha    |3333    |100
 4|  edu     | dha        | nara   |4444    |100
 5|  busi    | dha        | gazi   |5555    |100
 6|  busi    | raj        | raj    |6666    |100

和'储蓄'表格如下:

id|DomainName|DivisionName|ZoneName|MemberId|DPS|Month|Year|AccounNo
 1|  hem     | raj        | raj    |1111    |100|jan  |2017|11111
 2|  hem     | raj        | bog    |2222    |150|jan  |2017|22221
 3|  edu     | dha        | dha    |3333    |200|jan  |2017|33331
 4|  edu     | dha        | nara   |4444    |250|jan  |2017|44441
 5|  busi    | dha        | gazi   |5555    |300|jan  |2017|55551

这里,ZoneName是DivisionName的子集,DivisionName是DomainName的子集。有时只给出DomainName,有时会给出DomainName和DivisionName,并且大多数时候会给出DomainName,DivisionName,ZoneName这三个。我需要发布会员的GeneralSaving'和节约的DPS'加入两个表后,显然我无法发布相同月份的数据。一个人可以有两个或三个以上的帐号,但帐户号是唯一的。现在我如何在laravel 5.2中加入或合并两个表?

输出如下: DomainName = hem,DivisionName = raj,ZoneName = raj,Month = Feb,Year = 2017

MemberId|AccountNo|GeneralSaving|DPS
1111    |11111    |100          |100
2222    |22221    |100          |150

如果DomainName = busi,DivisionName = dha,Month = Feb,Year = 2017

MemberId|AccountNo|GeneralSaving|DPS
5555    |55551    |100          |300
6666    |         |100          |

2 个答案:

答案 0 :(得分:1)

试试这个......

    SELECT s.MemberId, s.AccounNo, s.DPS, m.GeneralSaving
    FROM member m
    JOIN savings s ON CASE WHEN $DomainName != null THEN s.DomainName = $DomainName END 
    AND CASE WHEN $DivisionName != null THEN s.DivisionName = $DivisionName END
    AND CASE WHEN $ZoneName != null THEN s.ZoneName = $ZoneName END

这里$ DomainName,$ DivisionName,$ ZoneName是用户输入。

答案 1 :(得分:0)

在laravel 5中,上述查询的sql将如下:

DB::table('member')
    ->leftjoin('savings', 'savings.MemberId', '=', 'member.MemberId')
    ->select('member.MemberId', 'savings.AccountNo', 'member.GeneralSaving', 'savings.Dps')
    ->where('savings.DomainName', '=', $DomainName)
    ->where('savings.DivisionName', '=', $DivisionName)
    ->where('savings.Month', '=', $Month)->where('savings.Year', '=', $Year)
    ->get

此查询已经在laravel 5中进行了测试,并且已经有效