SQL左连接未按预期获得结果

时间:2015-11-30 10:48:48

标签: mysql left-join

我有两张表如下:

TABLEA

pat_id   name   user_id

1     sam       1
2     jose      1
3     sandra    2

tableB的

    id      pat_id  pat-main_name

    1           1    MR0001
    2           3    MR0005  

我期待结果如下:

pat_id   name   user_id pat-main_name

1     sam       1    MR0001
2     jose      1

我有user_id = 1

我所做的如下:

SELECT tableA.pat_id,tableA.name,tableA.user_id,tableB.pat-main_name
FROM tableA
LEFT OUTER JOIN tableB
where tableA.pat_id = tableB.pat_id AND tableA.user_id;

我的结果如下:

pat_id   name   user_id pat-main_name

1     sam       1    MR0001
2     jose      1
3     Sandra    2

我该怎么办?

4 个答案:

答案 0 :(得分:1)

此查询正确连接2个表:

SELECT tableA.pat_id
    ,tableA.name
    ,tableA.user_id
    ,tableB.`pat-main_name`
FROM tableA
LEFT OUTER JOIN tableB
    ON tableA.pat_id = tableB.pat_id;

您的原始查询混合了旧语法和较新的ANSI语法,这应该是首选:

  • 旧语法= FROM a,b WHERE a.x = b.x ...
  • new ANSI = ... JOIN ON a.x = b.x ...

您可以通过添加WHERE子句来限制输出,例如WHERE tableA.user_id = 1

它会给出这个输出:

1     sam       1    MR0001
2     jose      1
3     Sandra    2    NULL

或者使用WHERE子句tableA.user_id = 1

1     sam       1    MR0001
2     jose      1

答案 1 :(得分:0)

使用left join

SELECT tableA.pat_id,tableA.name,tableA.user_id,tableB.pat-main_name
FROM tableB left join tableA
ON tableB.pat_id = tableA.pat_id
WHERE tableA.user_id=1

答案 2 :(得分:0)

这将有效:

SELECT 
 tableA.pat_id, tableA.name, tableA.user_id,
 tableB.`pat-main_name`
FROM tableA LEFT OUTER JOIN tableB ON tablea.pat_id = tableb.pat_id
Where tablea.user_id = 1

答案 3 :(得分:-1)

您可以按如下方式编写查询:

 SELECT `t`.`name`, 
   `t1`.`pat_id`, 
   `t1`.`pat-main_name` 
    FROM tableA AS t LEFT JOIN tableB AS t1 ON `t`.`pat_id` = `t1`.`pat_id`