sql >> Databasteknik >  >> RDS >> Mysql

SQL-tagglista och taggfiltrering

left join tags tabell och inkludera det id som söks efter i join-klausulen och kontrollera om det finns antal i having .

SELECT u.id,u.name,GROUP_CONCAT(ut.tagid) as tags
FROM users u 
LEFT JOIN usertag as ut ON u.id = ut.userid 
LEFT JOIN tags t ON t.id=ut.tagid AND t.ID IN (10,20,30) --change this as needed
GROUP BY u.id,u.name
HAVING COUNT(ut.tagid) >= COUNT(t.id) AND COUNT(t.id) = 3 --change this number to the number of tags

Ytterligare ett alternativ är att använda FIND_IN_SET om det finns begränsade värden. Till exempel,

SELECT * FROM (
SELECT u.*, GROUP_CONCAT(ut.tagid) as tags 
FROM users as u 
LEFT JOIN usertag as ut ON u.id = ut.userid 
GROUP BY u.id
) T
WHERE FIND_IN_SET('10',tags) > 0 AND FIND_IN_SET('20',tags) > 0



  1. SQL-anslutningsfråga

  2. Det gick inte att hämta projektmetadata. Se till att det är ett MSBuild-baserat .NET Core-projekt

  3. Hur man skickar e-post med Oracle 10 g Forms

  4. Kan jag använda ON DUPLICATE KEY UPDATE med en INSERT-fråga med alternativet SET?