MySQL有两个select语句,不在

MySQL有两个select语句,不在,mysql,Mysql,我试图从预订系统中转移以下信息: 选择其产品在过去一年中未收到任何付费预订或其产品未收到任何付费预订的用户 用户可以提供多个产品,我只想选择这些条件适用于其所有产品的用户 我有两个包含必要信息的表:产品表和预订表。没有任何预订的用户在预订表中没有记录;只有在其所有产品的预订时间超过一年前时,才应选择已预订的用户 我有以下两条语句,但我想将它们组合起来,但它们并没有给我正确的信息(不幸的是,我不太熟悉这些困难的SQL语句): 没有预订的用户(我认为这是正确的): 去年没有任何预订的用户(我选择

我试图从预订系统中转移以下信息:

  • 选择其产品在过去一年中未收到任何付费预订或其产品未收到任何付费预订的用户
  • 用户可以提供多个产品,我只想选择这些条件适用于其所有产品的用户
我有两个包含必要信息的表:产品表和预订表。没有任何预订的用户在预订表中没有记录;只有在其所有产品的预订时间超过一年前时,才应选择已预订的用户

我有以下两条语句,但我想将它们组合起来,但它们并没有给我正确的信息(不幸的是,我不太熟悉这些困难的SQL语句):

没有预订的用户(我认为这是正确的):

去年没有任何预订的用户(我选择status_paid,它有日期时间格式)

我如何将它们结合起来,使它们发挥作用


非常感谢你帮助我

如果需要简单连接,可以在两个选择之间使用左连接

   select t1.user_id, t1.id 
   from (
      SELECT products.user_id , products.id
      FROM products
      LEFT JOIN bookings
      ON bookings.product_id = products.id
      WHERE bookings.product_id IS NULL
   ) t1 
   left join (
    SELECT DISTINCT bookings.user_id, DATE_FORMAT(bookings.status_paid, '%Y-%m-%d')
    FROM bookings
    WHERE bookings.user_id NOT IN (
       SELECT bookings.user_id
        FROM bookings
        WHERE DATE_FORMAT(bookings.status_paid, '%Y-%m-%d') > 
      DATE_ADD(DATE_FORMAT(bookings.status_paid, '%Y-%m-%d'), INTERVAL -1 YEAR)
    )
  ) t2 on t1.user_id = t2.user_id
看见
SELECT DISTINCT bookings.user_id, DATE_FORMAT(bookings.status_paid, '%Y-%m-%d')
FROM bookings
WHERE bookings.user_id NOT IN (
    SELECT bookings.user_id
    FROM bookings
    WHERE DATE_FORMAT(bookings.status_paid, '%Y-%m-%d') > 
DATE_ADD(DATE_FORMAT(bookings.status_paid, '%Y-%m-%d'), INTERVAL -1 YEAR)
    )
AND bookings.status_paid IS NOT NULL
   select t1.user_id, t1.id 
   from (
      SELECT products.user_id , products.id
      FROM products
      LEFT JOIN bookings
      ON bookings.product_id = products.id
      WHERE bookings.product_id IS NULL
   ) t1 
   left join (
    SELECT DISTINCT bookings.user_id, DATE_FORMAT(bookings.status_paid, '%Y-%m-%d')
    FROM bookings
    WHERE bookings.user_id NOT IN (
       SELECT bookings.user_id
        FROM bookings
        WHERE DATE_FORMAT(bookings.status_paid, '%Y-%m-%d') > 
      DATE_ADD(DATE_FORMAT(bookings.status_paid, '%Y-%m-%d'), INTERVAL -1 YEAR)
    )
  ) t2 on t1.user_id = t2.user_id