sql >> Database >  >> RDS >> Mysql

MySQL - Selecteer gegevens met een JOIN maar met WHERE-clausules die van toepassing zijn op complexe en verschillende perimeters

Gebruik recipient NOT IN (SELECT ...) en author NOT IN (SELECT ...) om de deelnemers uit te sluiten die voldoen aan uw voorwaarden 1 en 2.

SELECT             
          hia.query_result_id,
          hia.url,
          hia.title,
          hia.article_publication_day,
          hia.media_name,
          hia.author_full_name,
          hia.author_first_name,
          hia.author_last_name,
          hia.author_email,
          ces.sent_at
FROM
          Hobby_ideas_articles hia
LEFT JOIN
          Past_Customer_sent_messages ces
ON
          hia.author = ces.recipient 
            AND ces.recipient NOT IN (
                SELECT recipient
                FROM Past_Customer_sent_messages
                WHERE sent_at > DATE_SUB(NOW(), INTERVAL 3 HOUR)
            )
WHERE
          hia.hobby_id = HOBBY_ID_INPUT_I_HAVE AND         
          hia.author IS NOT NULL
          AND hia.author NOT IN (
            SELECT recipient
            FROM Past_Customer_sent_messages
            WHERE customer_id = CUSTOMER_ID_INPUT_I_HAVE
            AND sent_at > DATE_SUB(NOW(), INTERVAL 30 DAY)
          )

De voorwaarde op ces moet in de ON . staan clausule zodat u sent_at = NULL . krijgt voor artikelen die geen overeenkomende rijen hebben.




  1. Hoe toegang krijgen tot de interne array-index met postgreSQL?

  2. YEAR() Voorbeelden – MySQL

  3. SQL Server Update Trigger, Alleen gewijzigde velden ophalen

  4. EXP() Functie in Oracle