Mysql 即使列值为null,也要连接多个表

Mysql 即使列值为null,也要连接多个表,mysql,laravel,Mysql,Laravel,我有一个表Users,它有3个其他表的外键(表有10个其他列,但不相关) 现在,我需要加入城市、国家和州表中受人尊敬的id。所有3个表都遵循下面的模式[ID/Name/Language/ColumnNameID] 城市表: ID Name CityId Language 1 Budapest 1 En 2 Paris 15 En 3 Berlin 54 En 4 Szeged 4

我有一个表
Users
,它有3个其他表的外键(表有10个其他列,但不相关)

现在,我需要加入城市、国家和州表中受人尊敬的
id
。所有3个表都遵循下面的模式
[ID/Name/Language/ColumnNameID]

城市表:

ID   Name       CityId  Language
1    Budapest   1       En
2    Paris      15      En
3    Berlin     54      En
4    Szeged     4       En
国家表:

ID   Name      CountryId  Language
1    Hungary   2          En
2    Germany   3          En
状态表:

ID   Name      StateId    Language
1    Berlin    1          En
这是一个查询,用于
leftJoin
-将所有三个表添加到用户表:

$results = DB::table('users')
    ->leftJoin('city', 'users.city_id', '=', 'city.city_id')
    ->where('city.language', '=', 'en')
    ->leftJoin('country', 'users.country_id', '=', 'country.country_id')
    ->where('country.language', '=', 'en')
    ->leftJoin('state', 'users.state_id', '=', 'state.state_id')
    ->where('state.language', '=', 'en')
    ->select('country.id', 'users.first_name', 'users.last_name', 'country.name as country_name', 'city.name as city_name', 'state.name as state_name')
    ->get();
工作正常,但在
state id
列下的
users
表中,如果值为
null
,则不会得到结果。下面是它的样子:

Id  First_Name    Last_Name  City_Name   Country_Name  State_Name
2   XXX           XXX        Berlin      Germany       Berlin
缺少StateID=null的两个条目。对此我能做些什么?

where('state.language','=','en')正在删除状态id为null的行。如果要保留这些行,必须添加一个条件,即语言可以为null。我不确定您将如何在Laravel中实现这一点,但SQL将是这样的:

where (state.language is null or state.language = 'EN')

将条件从何处移动到启用位置(移动到左联接的条件)。在SQL中,这看起来像是来自左加入城市的用户(users.city\u id=city.city\u id和city.language='en')左加入国家…。
where (state.language is null or state.language = 'EN')