Mysql join其中value或null

时间:2014-02-12 11:16:23

标签: mysql join

我有一张桌子PROD

ID    NAME
1     Apple
2     Banana

相对表格价格,全球价格(ID_USER为空) 或每用户价格(ID_USER)

PROD_ID    USER_ID   PRICE
1          null      10
1          5         8

现在,我需要一个查询所有产品和相对价格的查询,

问题是,我只是在有一个用户价格的情况下试图检索用户价格,否则检索全球价格

SELECT PROD.* , PRICES.* FROM PROD
LEFT JOIN PRICES ON PROD.ID_PROD = PRICES.ID_PROD 
WHERE PRICES.USER_ID IS NULL OR PRICES.USER_ID = 5

此查询返回2行(prod与2个价格连接)

有没有办法只在一个查询中检索产品的确切价格?

谢谢!!

编辑:在连接中,我需要每个用户的价格行(最后一个),只有当行存在时,否则我需要检索具有全局价格的行,这可能吗?

1 个答案:

答案 0 :(得分:0)

SELECT
  prod.*,
  COALESCE(p_user, p_default) As Price
FROM
  Prod INNER JOIN (SELECT
                     PROD_ID,
                     MAX(CASE WHEN USER_ID=5 THEN Price END) p_user,
                     MAX(CASE WHEN USER_ID IS NULL THEN Price END) p_default
                   FROM
                     Prices
                   GROUP
                     BY PROD_ID) m_uid
  ON Prod.ID = m_uid.Prod_ID

请参阅小提琴here