所以基本上我想做的是。。。我的任务是找到那些拥有“csm”、“lsp”或“csd”的人,但也加入了“client\u personal”表中的信息,这些信息与“csm”、“lsp”或“csd”搜索结果中的“client\u no”匹配
我确信我做这些都是“bass ackwords”,但最终目标是显示客户信息,包括表“client\u personal”中的其他字段,这样销售人员就可以为那些有“csm”但没有“lsp”或“csd”记录的人做推销(考虑到更高的级别)-不幸的是有1:一堆乱七八糟的东西,成吨的重复,多个条目和2:没有一个更容易使用的数据库可以达到“最高级别”。
SELECT client_no,product,status,paid_date
FROM client_educational
LEFT JOIN client_personal
ON client_educational.client_no = client_personal.client_no
WHERE product='CSM'
OR product='LSP'
OR product='CSD'
以下是我感兴趣的数据库:
client_educational
client_no product status pd_date
500000 CSM pd-cert 2018-06-20
500001 CSM pd-cert 2018-06-20
500001 LSP pd-cert 2018-06-20
500002 CSM pd-cert 2018-06-20
500002 LSP pd-cert 2018-06-20
500002 CSD pd-cert 2018-06-20
client_personal
client_no name email phone
500000 John Doe mail@mail.com 555-555-5555
500001 John Shmoe mail@mail.com 555-555-5555
500002 John Howe mail@mail.com 555-555-5555
所以我需要的不仅是合并结果,而且只显示那些只有产品“csm”而没有“lsp”或“csd”的,使用“client\ u no”行作为唯一标识符。。。。
像这样的。。。
client_no product status pd_date name email phone
500000 CSM pd-cert 2018-06-20 John Doe mail@mail.com 555-555-5555
2条答案
按热度按时间pbpqsu0x1#
您可以对条件使用条件聚合检查,只显示那些只有产品“csm”而没有“lsp”或“csd”的条件
在mysql中,当在sum(a=b)中使用一个表达式时,它的结果将是一个布尔值0/1,因此您可以使用上面的方法获得条件计数。
另一种使用方法存在
两个查询的演示
p4tfgftt2#
试试看用吧
left join
```select
T1.
client_no
,T2.
product
,T2.
status
,T2.
pd_date
,T1.
name
,T1.
email
,T1.
phone
from client_personal T1
left join client_educational T2 on T1.
client_no
= T2.client_no
and T2.
product
= 'CSM'left join client_educational T3 on T1.
client_no
= T3.client_no
and T3.
product
IN('LSP', 'CSD')where T2.
client_no
is not nulland T3.
client_no
is null| client_no | product | status | pd_date | name | email | phone |
| 500000 | CSM | pd-cert | 2018-06-20 00:00:00 | John Doe | mail@mail.com | 555-555-5555 |
CREATE TABLE client_educational
(
client_no
int,product
varchar(3),status
varchar(7),pd_date
datetime);
INSERT INTO client_educational
(
client_no
,product
,status
,pd_date
)VALUES
(500000, 'CSM', 'pd-cert', '2018-06-20 00:00:00'),
(500001, 'CSM', 'pd-cert', '2018-06-20 00:00:00'),
(500001, 'LSP', 'pd-cert', '2018-06-20 00:00:00'),
(500002, 'CSM', 'pd-cert', '2018-06-20 00:00:00'),
(500002, 'LSP', 'pd-cert', '2018-06-20 00:00:00'),
(500002, 'CSD', 'pd-cert', '2018-06-20 00:00:00')
;
CREATE TABLE client_personal
(
client_no
int,name
varchar(10),email
varchar(13),phone
varchar(12));
INSERT INTO client_personal
(
client_no
,name
,email
,phone
)VALUES
(500000, 'John Doe', 'mail@mail.com', '555-555-5555'),
(500001, 'John Shmoe', 'mail@mail.com', '555-555-5555'),
(500002, 'John Howe', 'mail@mail.com', '555-555-5555')
;