sql >> Databasteknik >  >> RDS >> Mysql

SELECTING med flera WHERE-villkor i samma kolumn

Du kan antingen använda GROUP BY och HAVING COUNT(*) = _ :

SELECT contact_id
FROM your_table
WHERE flag IN ('Volunteer', 'Uploaded', ...)
GROUP BY contact_id
HAVING COUNT(*) = 2 -- // must match number in the WHERE flag IN (...) list

(förutsatt att contact_id, flag är unik).

Eller använd joins:

SELECT T1.contact_id
FROM your_table T1
JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded'
-- // more joins if necessary
WHERE T1.flag = 'Volunteer'

Om listan med flaggor är väldigt lång och det finns många matcher är den första förmodligen snabbare. Om listan med flaggor är kort och det finns få matchningar, kommer du förmodligen att upptäcka att den andra är snabbare. Om prestanda är ett problem, testa båda på dina data för att se vilken som fungerar bäst.



  1. PostgresSQL-installationen misslyckades:initiering av databaskluster misslyckades MAC OS

  2. SQL - Hur lagrar och navigerar man i hierarkier?

  3. K-Nearest Neighbor Query i PostGIS

  4. Hur man undviker att infoga dubbletter av poster i SQL INSERT-fråga (5 enkla sätt)