如何从一个表中获取所有数据并替换另一个表中的值(如果存在)?

时间:2017-09-28 02:09:11

标签: mysql laravel laravel-query-builder

我有两张桌子。

表1

| id         | name        | description  |
|:-----------|------------:|:------------:|
| 1          | abc         |     qqq
| 2          | efg         |     qqq
| 3          | hij         |     wqq
| 4          | klm         |     c
| 5          | nop         |     de
| 6          | qrs         |     aa

表2

| id         | quantity    |
|:-----------|------------:|
| 1          | 10          | 
| 2          | 21          |  

我想显示表1中的所有记录,然后从表2中获取数量。如果表1中的id存在于表2中,那么数量值将如表2中所列,否则我将设置0对于表2中未找到的id。

我试过这个

DB::table('table1')
->leftJoin('table2', function($join) use($option){
$join->where('option', $option)
->on('table1.id', '=', 'table2.id');
})
->select(table1.*','table2.*')
->get();

它返回table1中的所有项,但它只获取table2中存在的id,其他将返回null。

如何才能获得预期的结果?

1 个答案:

答案 0 :(得分:1)

SELECT tab1.*, ifnull(tab2.quantity, 0) AS qty
FROM tab1
LEFT JOIN tab2 ON tab1.id = tab2.id