Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - Wybierz dane za pomocą JOIN, ale z klauzulami WHERE dotyczącymi złożonych i odrębnych obwodów

Użyj recipient NOT IN (SELECT ...) i author NOT IN (SELECT ...) aby wykluczyć uczestników spełniających warunki 1 i 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)
          )

Warunek na ces musi być w ON klauzula, dzięki której otrzymasz sent_at = NULL dla artykułów, które nie mają żadnych pasujących wierszy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP :wstaw kilka wartości pól wyboru do jednej kolumny MySQL

  2. Django - OperationalError:(1054, nieznana kolumna „xx” w „liście pól”)

  3. Nie znaleziono konwertera dla zwracanej wartości typu:class java.util.ArrayList (Spring Boot)

  4. Jak sprawdzić, czy zapytanie MySQL UPDATE nie powiedzie się, ponieważ dostarczane informacje są zgodne z danymi już w bazie danych?

  5. co jest szybsze, count(*) lub count(table_field_name) w mysql?