sql >> Databáze >  >> RDS >> Mysql

MySQL – Vybírejte data pomocí JOIN, ale s klauzulemi WHERE, které se vztahují na složité a odlišné perimetry

Použijte recipient NOT IN (SELECT ...) a author NOT IN (SELECT ...) k vyloučení účastníků, kteří splňují vaše podmínky 1 a 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)
          )

Podmínka na ces musí být v ON klauzule, takže dostanete sent_at = NULL pro články, které nemají žádné odpovídající řádky.




  1. Proč tato transakce PostgreSQL dává VAROVÁNÍ:neprobíhá žádná transakce

  2. Vložené, odstraněné tabulky (magické tabulky) v MySQL

  3. Najděte nejbližší odpovídající řetězce a jejich podřetězce pomocí SQL dotazu

  4. Jak nejprve třídit podle čísel pomocí dotazu Oracle SQL?