我有一个包含以下列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'
)

08-28 14:54