MySQL select statement with CASE or IF ELSEIF? Not sure how to get the result

后端 未结 3 977
温柔的废话
温柔的废话 2020-11-27 15:37

I have a two tables. One has manufacturer information and includes the regions where they can sell. The other has their products for sale. We have to limit visibility of

相关标签:
3条回答
  • 2020-11-27 16:14

    Try this query -

    SELECT 
      t2.company_name,
      t2.expose_new,
      t2.expose_used,
      t1.title,
      t1.seller,
      t1.status,
      CASE status
          WHEN 'New' THEN t2.expose_new
          WHEN 'Used' THEN t2.expose_used
          ELSE NULL
      END as 'expose'
    FROM
      `products` t1
    JOIN manufacturers t2
      ON
        t2.id = t1.seller
    WHERE
      t1.seller = 4238
    
    0 讨论(0)
  • 2020-11-27 16:19

    Syntax:

    CASE value WHEN [compare_value] THEN result 
    [WHEN [compare_value] THEN result ...] 
    [ELSE result] 
    END
    

    Alternative: CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...]

    mysql> SELECT CASE  WHEN 2>3 THEN 'this is true' ELSE 'this is false' END; 
    +-------------------------------------------------------------+
    | CASE  WHEN 2>3 THEN 'this is true' ELSE 'this is false' END |
    +-------------------------------------------------------------+
    | this is false                                               | 
    +-------------------------------------------------------------+
    

    I am use:

    SELECT  act.*,
        CASE 
            WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NULL) THEN lises.location_id
            WHEN (lises.session_date IS NULL AND ses.session_date IS NOT NULL) THEN ses.location_id
            WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date>ses.session_date) THEN ses.location_id
            WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date<ses.session_date) THEN lises.location_id
        END AS location_id
    FROM activity AS act
    LEFT JOIN li_sessions AS lises ON lises.activity_id = act.id AND  lises.session_date >= now()
    LEFT JOIN session AS ses ON  ses.activity_id = act.id AND  ses.session_date >= now()
    WHERE act.id
    
    0 讨论(0)
  • 2020-11-27 16:23

    Another way of doing this is using nested IF statements. Suppose you have companies table and you want to count number of records in it. A sample query would be something like this

    SELECT IF(
          count(*) > 15,
          'good',
          IF(
              count(*) > 10,
              'average',
              'poor'
            ) 
          ) as data_count 
          FROM companies
    

    Here second IF condition works when the first IF condition fails. So Sample Syntax of the IF statement would be IF ( CONDITION, THEN, ELSE). Hope it helps someone.

    0 讨论(0)
提交回复
热议问题