SQL - 加入多个条件

时间:2018-03-26 20:37:05

标签: sql join

我尝试根据映射表users加入我的jobs表和users_jobs表:

这是users表的样子:

 users
|--------|------------------|
|  id    |        name      |    
|--------|----------------- |
|   1    |  Ozzy Osbourne   |
|   2    |  Lemmy Kilmister |
|   3    | Ronnie James Dio |
|   4    |    Jimmy Page    |
|---------------------------|

jobs表看起来像这样:

    |--------|-----------------|
    |  id    |      title      |    
    |--------|-----------------|
    |   1    |  Singer         |
    |   2    |  Guitar Player  |
    |--------------------------|

users_jobs表看起来像这样:

  |--------|-------------|-------------|---------------|-------------|
  |  id    |  user_id    |   job_id    |  column3      |    column4  |
  |--------|-------------|-------------|---------------|-------------|
  |   1    |      1      |     1       |     0         |      1      |
  |   2    |      2      |     1       |     1         |      0      |
  |   3    |      3      |     1       |     0         |      1      |
  |   4    |      4      |     2       |     1         |      0      |
  |----------------------|-------------|---------------|-------------|

例如,让我们说ozzy会进行查询。 这是应该期待的:

|--------|------------------|------------|--------- |
|  id    |        name      |   column3  | column4  |
|--------|----------------- |------------|----------|
|   1    |  Ozzy Osbourne   |     0      |    1     |
|   2    |  Lemmy Kilmister |     1      |    0     |
|   3    | Ronnie James Dio |     0      |    1     |
|---------------------------|------------|----------|

基本上,他只能看到他注册的职位(角色)和所包含的用户。

我试着这样做:

SELECT u1.*, uj1.colum3, uj1.column4 
FROM users AS u1 
  JOIN users_jobs AS uj1 ON uj1.user_id = 1 
  JOIN jobs AS j1 ON j1.id = up1.job_id
WHERE uj1.job_id = 1

任何帮助都会很棒!

3 个答案:

答案 0 :(得分:2)

看起来你需要INNER JOIN试试这个:

select u.id, u.column3 , u.column4 from users u 
inner join user_jobs uj on u.id=uj.user_id 
inner join jobs j on j.id=uj.job_id 
where uj.job_id=1;

如果您需要某个user_id

select u.id, u.column3 , u.column4 from users u 
inner join user_jobs uj on u.id=uj.user_id 
inner join jobs j on j.id=uj.job_id 
where uj.job_id=1
and u.id=1;

答案 1 :(得分:1)

我找到了解决方案。 使用@stackFan方法添加EXISTS子句以确保用户在。

SELECT u.id, u.column3 , u.column4 
FROM users u 
 INNER JOIN user_jobs uj on u.id = uj.user_id 
 INNER JOIN jobs j on j.id = uj.job_id 
WHERE uj.job_id = <job-ID>
AND 
EXISTS (
       SELECT *
       FROM users_jobs AS uj
       WHERE uj.job_id = <job-ID>
       AND uj.user_id = <user-ID>
       );

答案 2 :(得分:0)

试试LEFT JOIN。它将显示所有用户,无论他们是否有工作。

SELECT u.id, u.name, uj.colum3, uj.column4 
FROM users AS u 
LEFT JOIN users_jobs uj ON uj.user_id = u.id 
LEFT JOIN jobs j ON j.id = uj.job_id