A complete answer for you to reflect (I did not put the conditions of the Where clause, it is up to you).
A traditional way is to use sub-queries for what you need this will work in most Dbms and not only in Mysql. Of course, this is a solution if the DBMS does not have available resource of Case When, used in the other answer by the friend @Dotnet.
It is worth remembering that it is important to measure the performance of the consultation, because when using sub-consultations, the consumption can be high.
CREATE TABLE TECNICO(
CODIGO INTEGER NOT NULL PRIMARY KEY,
NOME VARCHAR(500) NOT NULL
);
CREATE TABLE TAREFA(
CODIGO INTEGER NOT NULL PRIMARY KEY,
DESCRICAO VARCHAR(500) NOT NULL,
DATA_INICIO DATETIME NOT NULL,
DATA_FIM DATETIME NOT NULL,
TECNICO INTEGER NOT NULL,
CONSTRAINT FK_TAREFA_TECNICO FOREIGN KEY (TECNICO)
REFERENCES TECNICO(CODIGO)
);
INSERT INTO TECNICO VALUES (1,'MATEUS');
INSERT INTO TECNICO VALUES (2,'JOSÉ');
INSERT INTO TECNICO VALUES (3,'CARLOS');
INSERT INTO TECNICO VALUES (4,'PATRÍCIA');
INSERT INTO TAREFA VALUES (100, 'CRIAR EJBs',
STR_TO_DATE('1/6/2016 8:06:26 AM', '%d/%m/%Y %r'),
STR_TO_DATE('30/6/2016 8:06:26 AM', '%d/%m/%Y %r'),1);
INSERT INTO TAREFA VALUES (101, 'Criar testes unitarios',
STR_TO_DATE('15/6/2016 8:06:26 AM', '%d/%m/%Y %r'),
STR_TO_DATE('30/6/2016 8:06:26 AM', '%d/%m/%Y %r'),1);
INSERT INTO TAREFA VALUES (102, 'Gerar build',
STR_TO_DATE('1/6/2016 8:06:26 AM', '%d/%m/%Y %r'),
STR_TO_DATE('2/6/2016 8:06:26 AM', '%d/%m/%Y %r'),2);
-- Aqui temos uma junção interna (só trará as correspondências que existem)
SELECT * FROM TECNICO te
inner join TAREFA ta ON te.CODIGO = ta.TECNICO;
-- Trará quem tem ou não tarefa (juntos - à esquerda)
SELECT * FROM TECNICO te
left outer join TAREFA ta ON te.CODIGO = ta.TECNICO;
-- Só os técnicos que não possuem tarefa. A query interna retorna os tecnicos que possuem tarefas e a externas aqueles que estão fora do conjunto. bastaria você acescentar a clausula where no select interno (subconsulta).
SELECT * FROM TECNICO te where te.codigo NOT IN (SELECT te.codigo FROM TECNICO te
inner join TAREFA ta ON te.CODIGO = ta.TECNICO)
great solution (case when) and performatic!! -D Congratulations!
– Mateus
Thanks Dot Net. Thanks for your help.
– user3771516