/ / SQL Mostra i valori in un conteggio () - mysql, sql

SQL Mostra i valori in un conteggio () - mysql, sql

Quindi ho due tabelle:

  People                    Jobs

id | name            id | personId | Status | place
--------------      ---------------------------------
1  | John            1  |    1     | Active | Home
2  | Melinda         2  |    1     | Active | Office
3  | Samuel          3  |    2     | Active | Home
4  |    3     | Active | Office
5  |    1     | Active | Garden

Problema:

Voglio visualizzare i nomi delle persone che hanno più di un lavoro attivo in casa o in ufficio. Potrei fare il conteggio e visualizzare il numero ma non riesco a visualizzare i nomi.

Ecco il mio codice (che non funziona):

SELECT t.name
FROM people p JOIN jobs j ON j.personId = p.id
WHERE j.status = "Active" AND j.place="Home" OR j.place="Office"
HAVING count(j.personId) > 1

risposte:

0 per risposta № 1

i tuoi AND e OR sono mescolati nella condizione WHERE:

cambia questo

 WHERE j.status = "Active" AND j.place="Home" OR j.place="Office"

a

  WHERE j.status = "Active" AND (j.place="Home" OR j.place="Office")

Prova questo

 SELECT p.name
FROM People p JOIN jobs t ON t.personId = p.id
WHERE t.status = "Active" AND (t.place="Home" OR t.place="Office")
GROUP BY p.name
HAVING count(t.personId) > 1

DEMO QUI


0 per risposta № 2

prova questa query

SELECT p.name
FROM people p JOIN jobs j ON j.personId = p.id
WHERE j.status = "Active" AND (j.place="Home" OR j.place="Office")
GROUP BY p.name
HAVING count(j.personId) > 1

0 per risposta № 3

Stai consolidando i dati ma senza "GROUP BY":

SELECT p.name
FROM people p JOIN jobs j ON j.personId = p.id
WHERE j.status = "Active" AND j.place="Home" OR j.place="Office"
GROUP BY p.name
HAVING count(j.personId) > 1

Tuttavia, ho già provato questo (sarà molto più efficiente se i dati di ls sono distorti ma potresti dover forzare un indice):

SELECT DISTINCT p.id, p.name
FROM people p
INNER JOIN jobs j1
ON p.id=j1.personId
AND j1.status="Active"
AND j1.place="Home"
INNER JOIN jobs j2
ON j1.personId=j2.personId
AND j2.status="Active"
AND j2.place="Office"