我有一个包含以下列Snum,Cnum,Program,Sdate和unit的服务表。 snum是服务编号,cnum是客户编号,program是他们向其收取服务费用的程序以及单位数。
snum cnum program sdate unit
1 1 A 2018-03-01 1
2 1 B 2018-03-02 1
3 2 A 2018-03-04 2
4 2 D 2018-03-05 1
5 3 C 2018-03-24 3
好的,我正在尝试提取由
A
提供给程序cnum
的所有服务的列表,还包括从cnum
提供给任何其他程序的所有服务的列表。在上面的示例中,我要提取snum
1-4
而不是5
。 最佳答案
将表与自身连接起来,将其中一个表限制为program = 'A'
。
SELECT s1.*
FROM service AS s1
JOIN service AS s2 ON s1.cnum = s2.cnum
WHERE s2.program = 'A';
您也可以使用
WHERE ... IN
编写更直观的代码:SELECT *
FROM service
WHERE cnum IN (
SELECT cnum
FROM service
WHERE program = 'A'
)