我有两张桌子 - 第一张叫做'用户',第二张叫做'买入道'。
我正在尝试选择那些user_name不在buy_courses中的所有用户。我试过像 -
这样的东西$users = DB::table('users')
->rightjoin('buy_courses', 'users.user_name', '=', 'buy_courses.user_name')
->get();
当我使用'<>'时,它会返回其user_name在'buy_courses'中的所有用户,然后我将获得所有用户。什么应该是正确的查询?
答案 0 :(得分:4)
使用Eloquent尝试一下:
$courseUserNames = BuyCourses::pluck('user_name')->all();
$users = User::whereNotIn('user_name', $courseUserNames)->select(...)->get();
或者,如果您更喜欢使用数据库查询:
$courseUserNames = DB::table('buy_courses')->pluck('user_name')->all();
$users = DB::table('users')->whereNotIn('user_name', $courseUserNames)->select(...)->get();
答案 1 :(得分:3)
DB::table("users")->select('*')->whereNotIn('user_name',function($query) {
$query->select('user_name')->from('buy_courses');
})->get();
加入实际上是Laravel的内部联接,所以实际上也许你可以尝试:
DB::table('users')
->join('buy_courses', 'users.user_name', '=', 'buy_courses.user_name')
->get();
答案 2 :(得分:0)
您可以使用SQL的'NOT IN'。
示例:
{{1}}
答案 3 :(得分:0)
只需将=
替换为!=
,然后使用函数join
$users = DB::table('users')
->join(
'buy_courses',
function ($join)
{$join->on('users.user_name', '!=', 'buy_courses.user_name');}
)
->get();