У меня есть таблица услуг со следующим столбцом Snum, Cnum, Program, Sdate и unit. Снум - номер службы, cnum - номер клиента, программа - это программа, на которую они оплачивают услугу, и количество единиц.
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'
)