MySQL左联接:从一个表中选择所有内容,但只选择第二个表中与条件匹配的值

MySQL左联接:从一个表中选择所有内容,但只选择第二个表中与条件匹配的值,mysql,join,Mysql,Join,我有两张桌子。我想从一个表中选择所有内容,并从第二个表中选择匹配的行,这符合条件 因此tblConfig\u Group包含组列表 |ID | groupCode | |1 | A | |2 | B | |3 | C | |4 | D | 和tblConfig\u CustomerGroup包含这些组中的组和客户列表 |ID | groupCode | customerID | |1 | A | 74

我有两张桌子。我想从一个表中选择所有内容,并从第二个表中选择匹配的行,这符合条件

因此
tblConfig\u Group
包含组列表

|ID | groupCode | 
|1  | A         |
|2  | B         |
|3  | C         |
|4  | D         |
tblConfig\u CustomerGroup
包含这些组中的组和客户列表

|ID | groupCode | customerID |
|1  | A         | 74         |
|2  | B         | 74         |
|3  | A         | 235        |
|4  | C         | 74         |
它应该只显示第二个表中匹配的行 和标准(
customerID
=74)

预期结果:

|ID | groupCode | customerID |
|1  | A         | 74         |
|2  | B         | 74         |
|3  | C         | 74         |
|4  | D         |            |
SELECT g.groupCode,  cg.customerID FROM tblConfig_Group g 
LEFT JOIN tblConfig_CustomerGroup cg ON g.groupCode = cg.groupCode  
WHERE cg.customerID = '74'
SELECT g.groupCode,  cg.customerID FROM tblConfig_Group g 
left outer join tblConfig_CustomerGroup cg on g.groupCode = cg.groupCode   
WHERE cg.customerID = '74' 
UNION  
SELECT g.groupCode, cg.customerID 
FROM tblConfig_Group g 
right outer join tblConfig_CustomerGroup cg on g.groupCode = cg.groupCode
我尝试了很多查询,但似乎对我不起作用

SQL查询1:

|ID | groupCode | customerID |
|1  | A         | 74         |
|2  | B         | 74         |
|3  | C         | 74         |
|4  | D         |            |
SELECT g.groupCode,  cg.customerID FROM tblConfig_Group g 
LEFT JOIN tblConfig_CustomerGroup cg ON g.groupCode = cg.groupCode  
WHERE cg.customerID = '74'
SELECT g.groupCode,  cg.customerID FROM tblConfig_Group g 
left outer join tblConfig_CustomerGroup cg on g.groupCode = cg.groupCode   
WHERE cg.customerID = '74' 
UNION  
SELECT g.groupCode, cg.customerID 
FROM tblConfig_Group g 
right outer join tblConfig_CustomerGroup cg on g.groupCode = cg.groupCode
实际结果:第1、2和3行

| groupCode | customerID |
| A         | 74         |
| B         | 74         |
| A         | 74         |
SQL查询2:

|ID | groupCode | customerID |
|1  | A         | 74         |
|2  | B         | 74         |
|3  | C         | 74         |
|4  | D         |            |
SELECT g.groupCode,  cg.customerID FROM tblConfig_Group g 
LEFT JOIN tblConfig_CustomerGroup cg ON g.groupCode = cg.groupCode  
WHERE cg.customerID = '74'
SELECT g.groupCode,  cg.customerID FROM tblConfig_Group g 
left outer join tblConfig_CustomerGroup cg on g.groupCode = cg.groupCode   
WHERE cg.customerID = '74' 
UNION  
SELECT g.groupCode, cg.customerID 
FROM tblConfig_Group g 
right outer join tblConfig_CustomerGroup cg on g.groupCode = cg.groupCode
实际结果:第1、2和3行+客户235

| groupCode | customerID |
| A         | 74         |
| B         | 74         |
| A         | 74         |
| A         | 235        |

您的第一个查询基本上是正确的,但只是缺少了一点点来包含null

SELECT g.groupCode, cg.customerID FROM tblConfig_Group g
LEFT JOIN tblConfig_CustomerGroup cg 
ON g.groupCode = cg.groupCode WHERE cg.customerID = '74'
OR cg.customerID IS NULL;
另一个解决办法是

SELECT g.groupCode, cg.customerID FROM tblConfig_Group g
LEFT JOIN 
   (SELECT * FROM tblConfig_CustomerGroup 
    WHERE customerID = '74') AS cg 
ON g.groupCode = cg.groupCode 

您的第一个查询基本上是正确的,但只是缺少了一点点来包含null

SELECT g.groupCode, cg.customerID FROM tblConfig_Group g
LEFT JOIN tblConfig_CustomerGroup cg 
ON g.groupCode = cg.groupCode WHERE cg.customerID = '74'
OR cg.customerID IS NULL;
另一个解决办法是

SELECT g.groupCode, cg.customerID FROM tblConfig_Group g
LEFT JOIN 
   (SELECT * FROM tblConfig_CustomerGroup 
    WHERE customerID = '74') AS cg 
ON g.groupCode = cg.groupCode 

为什么在预期结果中,您希望
id=3
groupCode=A
在第三行?当您使用
LEFT JOIN
时,第二个表上的条件应该放在
on
子句中,因为将其放在
WHERE
子句中会过滤掉
cg.customerID
NULL
的行。嗨,Alex,你说得很对,我把它改成了C,但是没有保存。巴尔马,你的意思是用和替换WHERE。知道了!谢谢为什么在预期结果中,您希望
id=3
groupCode=A
在第三行?当您使用
LEFT JOIN
时,第二个表上的条件应该放在
on
子句中,因为将其放在
WHERE
子句中会过滤掉
cg.customerID
NULL
的行。嗨,Alex,你说得很对,我把它改成了C,但是没有保存。巴尔马,你的意思是用和替换WHERE。知道了!谢谢测试了这两个查询,它们也可以工作。谢谢你!很高兴能够帮助测试这两个查询,它们也很有效。谢谢你!很高兴能帮忙