sql >> Databasteknik >  >> RDS >> Mysql

SQL-fråga minst en av något

För att hitta alla användare med minst ett inlägg med betyg över 10, använd:

SELECT u.*
  FROM USERS u
 WHERE EXISTS(SELECT NULL
                FROM POSTS p
               WHERE p.user_id = u.id
                 AND p.rating > 10)

EXISTS bryr sig inte om SELECT-satsen i den - du kan ersätta NULL med 1/0, vilket borde resultera i ett matematiskt fel för att dividera med noll... Men det gör det inte, eftersom EXISTS bara handlar om filtreringen i WHERE-klausulen.

Korrelationen (WHERE p.user_id =u.id) är anledningen till att detta kallas en korrelerad underfråga, och kommer bara att returnera rader från tabellen ANVÄNDARE där id-värdena matchar, förutom betygsjämförelsen.

EXISTS är också snabbare, beroende på situationen, eftersom det returnerar sant så fort kriterierna är uppfyllda - dubbletter spelar ingen roll.



  1. Oracle Joins - Jämförelse mellan konventionell syntax VS ANSI-syntax

  2. Jquery datepicker med Ajax fungerar inte

  3. MySQL JOIN för att ersätta ID:n med värde från en annan tabell

  4. TreeView ImageCombo rullgardinsmeny