我可以像这样在Laravel laravel中加入3个表:
B D E
+-----------+ +-----------+ +-----------+
| *id | | *id | | *id |
| | | B_id | | |
| | /| E_id |\ | |
| |-----| |-----| |
| | \| |/ | |
| | | | | |
+-----------+ +-----------+ +-----------+
$queries = DB::table('D')
->join('B', 'B.id', '=', 'D.B_id')
->join('E', 'E.id', '=', 'D.E_id')
->select('*')
->get();
那么我如何联接三个以上的表,如下所示:
A B D E
+-----------+ +-----------+ +-----------+ +-----------+
| *id | | *id | | *id | | *id |
| B_id | | | | B_id | | |
| |\ | | /| E_id |\ | |
| +------| |-----| |-----| |
| |/ | | \| |/ | |
| | | | | | | |
+-----------+ +-----------+ +-----------+ +-----------+
我在SQL中尝试做的事情如下:
SELECT * FROM A,B,C,D
WHERE B.id=A.B_id
AND B.id=D.B_id
AND D.E_id=E.id
答案 0 :(得分:0)
使用交叉联接然后在查询的where
部分中使用联接条件是一种不好的做法。
您需要将第二个查询转换为使用INNER JOIN
(或仅使用JOIN
来相同)。
然后,转换为雄辩的将更为直接。您可以写:
SELECT *
FROM B
JOIN A ON B.id=A.B_id
JOIN D ON B.id=D.B_id
JOIN E ON E.id=D.E_id
那么您的雄辩查询将很简单:
$queries = DB::table('B')
->join('A', 'B.id', '=', 'A.B_id')
->join('D', 'B.id', '=', 'D.B_id')
->join('E', 'E.id', '=', 'D.E_id')
->select('*')
->get();