mysql - 即使列值为空也加入多个表
问题描述
我有一个表Users
,它有 3 个其他表的外键(表有 10 个其他列,但不相关)
ID CityId CountryID StateId
1 1 2 null
2 4 2 null
3 54 3 1
现在我需要加入他们尊敬的城市、国家和州表ids
。所有 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
所有三个表都添加到 Users 表中:
$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();
有效,但我没有得到列users
下表格state id
中值所在的结果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 的条件。我不确定你将如何在 Laravel 中实现它,但 SQL 就像:
where (state.language is null or state.language = 'EN')
推荐阅读
- javascript - Vue-router scrollBehavior:为什么 savedPosition 总是等于 { x: 0, y: 0 }?
- c# - 在 Xamarin 中将颜色转换为较深的阴影
- spring-boot - 春季云流-消费者配置不起作用
- angular - 提交Angular 6后将控件添加到最近的表单
- bash - /bin/bash 命令内函数的函数参数
- python - 强制 IPython 执行当前的多行代码块
- javafx - 我可以在 JavaFX 项目中使用来自 android 的 NumberPicker 控件吗?
- powershell - Issue in accessing member details of groups in ADUser
- machine-learning - 发现样本数量不一致的输入变量:[2, 144]
- nmake - 为什么当依赖项没有改变时,nmake 会执行链接目标?