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。知道了!谢谢测试了这两个查询,它们也可以工作。谢谢你!很高兴能够帮助测试这两个查询,它们也很有效。谢谢你!很高兴能帮忙