SQL 左连接没有得到预期的结果
SQL left join not getting result as expected
我有两个表如下:
表A
pat_id name user_id
1 sam 1
2 jose 1
3 sandra 2
表B
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
我该怎么办?
使用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
这会起作用:
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
此查询正确连接了 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...
- 新 ANSI = ...加入 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
你可以这样写查询:
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`
我有两个表如下:
表A
pat_id name user_id
1 sam 1
2 jose 1
3 sandra 2
表B
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
我该怎么办?
使用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
这会起作用:
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
此查询正确连接了 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...
- 新 ANSI = ...加入 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
你可以这样写查询:
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`