连接多张表查询
xuexi 2025-06-06 17:09:59 发表在:PHP 查看数:21

此查询确保了 tableA 中的每条记录都会出现在结果中,而 tableB 的数据在无匹配时显示 NULL。

SELECT A.*, B.*
FROM cb_shenpi_jiedian AS A
LEFT JOIN cb_shenpi_jilu AS B 
    ON A.id = B.jiedian_id
WHERE [你的筛选条件];  -- 在此处添加条件

比如:
SELECT A.*, B.*
FROM cb_shenpi_jiedian AS A
LEFT JOIN cb_shenpi_jilu AS B ON A.id = B.jiedian_id
where A.leixing_id = 8

在laravel中,join关键字很重要,是否显示左表数据返回null

use Illuminate\Support\Facades\DB;

// 获取数据
$results = DB::table('cb_shenpi_jiedian as jiedian')
            ->leftJoin('cb_shenpi_jilu as jilu', 'jiedian.id', '=', 'jilu.jiedian_id')
            ->where('jiedian.leixing_id', 8)
            ->orderBy('jiedian.id', 'asc')
            ->get();

// 处理结果
foreach ($results as $row) {
    // 访问审批节点(jiedian)字段
    echo $row->shenpi_name;  // jiedian表的字段

    // 访问审批记录(jilu)字段 - 注意左连接可能为null
    if ($row->shenpi_result) {
        echo $row->shenpi_result;  // jilu表的字段
    }
}

字段冲突问题:

如果两个表有同名字段(如 id),后加入表的字段会覆盖前者

建议使用 select() 明确指定需要获取的字段:

->select(
    'jiedian.id as jiedian_id',
    'jiedian.*',
    'jilu.id as jilu_id',
    'jilu.shenpi_result'
)
最近访问时间:2025-06-07 19:47:52
知识库:353条鸣谢:TAY  备案号:蜀ICP备2024090044号-2